【发布时间】:2015-10-11 02:15:55
【问题描述】:
我的问题几乎在dplyr 0.3.0.9000 how to use do() correctly 中得到了回答,但还没有完全解决。
我有一些看起来像这样的数据:
> head(myData)
Sequence Index xSamples ySamples
6 0 5 0.3316187 3.244171
7 0 6 1.5131778 2.719893
8 0 7 1.9088933 3.122991
9 0 8 2.7940244 3.616815
10 0 9 3.6500311 3.519641
序列实际上的范围是从 0 到 9999。在每个序列中,xSamples 和 ySamples 都应该与 Index 成线性关系。计划是按序列对 myData 进行分组,然后在每个组上通过 do() 使用 lm()。代码是这样的(从帮助中无耻地解除):
library(dplyr)
myData_by_sequence <- group_by(myData, Sequence)
models <- myData_by_sequence %>% do(mod = lm(xSamples ~ Index, data = .))
这可行,但我得到的结果是 this 。 . .
> head(models)
Source: local data frame [10000 x 2]
Sequence mod
1 0 <S3:lm>
2 1 <S3:lm>
3 2 <S3:lm>
4 3 <S3:lm>
5 4 <S3:lm>
6 5 <S3:lm>
。 . .我想要的数据卡在第二列中。我有一个有效的plyr 解决方案,就像这样。 . .
models <- dlply(myData, "Sequence", function(df) lm(xSamples ~ Index, data = df))
xresult <- ldply(models, coef)
。 . .感谢coef(),这给了我分解成数据框的结果。问题是我无法将 dplyr(我通常使用和喜爱)与 plyr 混合,而且我似乎无法让 coef() 处理 dplyr 输出的第二列。
我尝试了其他一些方法,例如同时尝试 coef() 和 lm() 步骤,我可以将第二列分解为线性模型列表,但我不能使用 do() on一个列表。
我真的觉得我在这里缺少一些明显的东西。 R 绝对不是我的主要语言。任何帮助将不胜感激。
编辑 试过 。 . .
result <-
rects %>%
group_by(Sequence) %>%
do(data.frame(Coef = coef(lm(xSamples ~ Frame, data = .))))
。 . .并得到非常接近的结果,但系数堆叠在同一列中:
Sequence Coef
1 0 -5.0189823
2 0 1.0004240
3 1 -4.9411745
4 1 0.9981858
【问题讨论】:
-
试试
myData %>% group_by(Sequence) %>% do(data.frame(Coef = coef(lm(xSamples~Index, data=.)))) -
谢谢,你的回复很好,我可以处理结果,尽管结果是我的系数线性排列而不是列(所以行是交替的截距,索引)。感谢您的快速回答!
-
试试
myData %>% group_by(Sequence) %>% do(data.frame(Coef = as.list(coef(lm(xSamples~Index, data=.))))) -
在前面的代码中,它都堆叠在一个单独的列'Coef'中。我认为通过使用
as.list,它将是两列,这是您的预期结果吗? -
您是否尝试过
data.table选项。它应该很快