我想使用dplyr对data.frame进行分组,拟合线性回归并将残差另存为原始未分组的data.frame中的列。

这是一个例子

> iris %>%
   select(Sepal.Length, Sepal.Width) %>%
   group_by(Species) %>%
   do(mod = lm(Sepal.Length ~ Sepal.Width, data=.)) %>%

返回值:
     Species     mod
1     setosa <S3:lm>
2 versicolor <S3:lm>
3  virginica <S3:lm>

相反,我希望原始data.frame具有一个包含残差的新列。

例如,
    Sepal.Length Sepal.Width  resid
1   5.1         3.5  0.04428474
2   4.9         3.0  0.18952960
3   4.7         3.2 -0.14856834
4   4.6         3.1 -0.17951937
5   5.0         3.6 -0.12476423
6   5.4         3.9  0.06808885

最佳答案

一个解决方案似乎比迄今为止提出的解决方案更容易,并且更接近原始问题的代码:

iris %>%
   group_by(Species) %>%
   do(data.frame(., resid = residuals(lm(Sepal.Length ~ Sepal.Width, data=.))))

结果 :
# A tibble: 150 x 6
# Groups:   Species [3]
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species   resid
          <dbl>       <dbl>        <dbl>       <dbl> <fct>     <dbl>
 1          5.1         3.5          1.4         0.2 setosa   0.0443
 2          4.9         3            1.4         0.2 setosa   0.190
 3          4.7         3.2          1.3         0.2 setosa  -0.149
 4          4.6         3.1          1.5         0.2 setosa  -0.180
 5          5           3.6          1.4         0.2 setosa  -0.125
 6          5.4         3.9          1.7         0.4 setosa   0.0681
 7          4.6         3.4          1.4         0.3 setosa  -0.387
 8          5           3.4          1.5         0.2 setosa   0.0133
 9          4.4         2.9          1.4         0.2 setosa  -0.241
10          4.9         3.1          1.5         0.1 setosa   0.120

关于r - 用 `dplyr`保存残差,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27452491/

10-12 19:49