Dplyrを使用して各時間(因子変数)のモデルを適合させたいのですが、エラーが発生し、何が間違っているのかよくわかりません。
df.h <- data.frame(
hour = factor(rep(1:24, each = 21)),
price = runif(504, min = -10, max = 125),
wind = runif(504, min = 0, max = 2500),
temp = runif(504, min = - 10, max = 25)
)
df.h <- tbl_df(df.h)
df.h <- group_by(df.h, hour)
group_size(df.h) # checks out, 21 obs. for each factor variable
# different attempts:
reg.models <- do(df.h, formula = price ~ wind + temp)
reg.models <- do(df.h, .f = lm(price ~ wind + temp, data = df.h))
さまざまなバリエーションを試してみましたが、うまくいきません。
Dplyr 0.4では、次のことができます。
df.h %>% do(model = lm(price ~ wind + temp, data = .))
do
のドキュメントから:
.f
:各ピースに適用する関数。 .fに提供される最初の名前のない引数はデータフレームになります。
そう:
reg.models <- do(df.h,
.f=function(data){
lm(price ~ wind + temp, data=data)
})
モデルが適合した時間を保存するのにもおそらく便利です:
reg.models <- do(df.h,
.f=function(data){
m <- lm(price ~ wind + temp, data=data)
m$hour <- unique(data$hour)
m
})
@fabians anwserのように関数を定義する必要がない場合、dplyr
をより適切な方法で使用できると思います。
results<-df.h %.%
group_by(hour) %.%
do(failwith(NULL, lm), formula = price ~ wind + temp)
または
results<-do(group_by(tbl_df(df.h), hour),
failwith(NULL, lm), formula = price ~ wind + temp)
編集:もちろんfailwith
なしでも動作します
results<-df.h %.%
group_by(hour) %.%
do(lm, formula = price ~ wind + temp)
results<-do(group_by(tbl_df(df.h), hour),
lm, formula = price ~ wind + temp)