問題

do()のRヘルプから少し変更された例:

 by_cyl <- group_by(mtcars, cyl)
models <- by_cyl %>% do(mod = lm(mpg ~ disp, data = .))
coefficients<-models %>% do(data.frame(coef = coef(.$mod)[[1]]))
 

データフレーム係数には、各cylグループの線形モデルの最初の係数があります。私の質問は、係数を持つ列だけでなく、グループ化変数を持つ列を含むデータフレームを作成する方法です。

=====編集:私は私の問題をより明確にしようとするために例を拡張します

モデルといくつかの予測の係数を抽出したいとしましょう。私はこれを行うことができます:

 by_cyl <- group_by(mtcars, cyl)
getpars <- function(df){
  fit <- lm(mpg ~ disp, data = df)
  data.frame(intercept=coef(fit)[1],slope=coef(fit)[2])
}
getprediction <- function(df){
  fit <- lm(mpg ~ disp, data = df)
  x <- df$disp
  y <- predict(fit, data.frame(disp= x), type = "response")
  data.frame(x,y)
}
pars <- by_cyl %>% do(getpars(.))
prediction <- by_cyl %>% do(getprediction(.))
 

問題は、モデルを2回フィッティングしているため、コードが冗長であることです。私の考えは、すべての情報を持つリストを返す関数を構築することでした:

 getAll <- function(df){
  results<-list()
  fit <- lm(mpg ~ disp, data = df)
  x <- df$disp
  y <- predict(fit, data.frame(disp= x), type = "response")

  results$pars <- data.frame(intercept=coef(fit)[1],slope=coef(fit)[2])
  results$prediction <- data.frame(x,y)

  results
 }
 

問題は、関数getAllでdo()を使用してパラメータ(データフレームparsなど)を持つデータフレームのみを取得する方法がわからないことです。

  ベストアンサー

こんな感じ?

 coefficients <-models %>% do(data.frame(coef = coef(.$mod)[[1]], group = .[[1]]))
 

ギリング

         coef group
  1 40.87196     4
  2 19.08199     6
  3 22.03280     8
 

  同じタグがついた質問を見る

rdplyr