拆分,应用线性模型,组合

时间:2015-08-05 16:35:28

标签: r list split lapply lm

我的数据框如下:

print = ("Hello World")
MyName = input("What is your name?")
print(MyName)

所以我想把这个数据帧按小时分割如下:

df

Date       Hour ID Par1  Par2  Par3 
08-01-15     0   A   2    3      4
08-01-15     0   B   4    5      6 
08-01-15     1   N   2    9      10
08-01-15     1   A   3    7      23
08-01-15     1   B   4    7      22
08-02-15     0   E   2    4      12
08-02-15     0   A   3    7       9

拆分后,我想将线性模型应用于拆分数据集。

splitdata<-split(df<-split(df, df$Hour)

我的结果没有显示任何内容。虽然我将摘要改为:

result <- lapply(splitdata, function(df){
  lm1 <-lm(Par1~Par2,data=df)
  summary <- (lm1$summary)
  data.frame(as.list(summary))
})
result

然后它会产生一个结果。

所以主要的问题是,如何按小时得到每个线性模型的摘要列表而不仅仅是系数?

谢谢!

2 个答案:

答案 0 :(得分:6)

尝试使用lmList

中的nlme
library(nlme)
fits <- lmList(Par1 ~ Par2 | Hour, data=df)

这会按小时分割数据并为您拟合线性模型。然后,您可以summary(fits)。或者,您可以使用

单独查看每个摘要
lapply(fits, summary)

答案 1 :(得分:3)

如果您正在寻找表格(我通常更喜欢):

> dt = data.table(df)
> dt[,{S = summary(lm(Par1 ~ Par2))$coefficients; list(Coef = S[2,1], Intercept = S[1,1], Sig = S[2,4])}, by = Hour]
   Hour      Coef Intercept      Sig
1:    0  0.314286   1.25714 0.439388
2:    1 -0.750000   8.75000 0.333333