use*_*868 15 r data.table
data.table包在速度方面非常有用.但我实际上在使用线性回归的输出时遇到了麻烦.是否有一种简单的方法可以使data.table输出与plyr包中的输出一样漂亮/有用?以下是一个例子.谢谢!
library('data.table');
library('plyr');
REG <- data.table(ID=c(rep('Frank',5),rep('Tony',5),rep('Ed',5)), y=rnorm(15), x=rnorm(15), z=rnorm(15));
REG;
ddply(REG, .(ID), function(x) coef(lm(y ~ x + z, data=x)));
REG[, coef(lm(y ~ x + z)), by=ID];
data.table系数估计值在单列中输出,而plyr/ddply系数估计值在多个且标记良好的列中输出.
我知道我可以用data.table运行三次回归,但这似乎效率很低.不过我可能错了.
REG[, Intercept=coef(lm(y ~ x + z))[1],
      x        =coef(lm(y ~ x + z))[2],
      z        =coef(lm(y ~ x + z))[3], by=ID];
42-*_*42- 14
试试这个:
> REG[, as.list(coef(lm(y ~ x + z))), by=ID];
        ID (Intercept)           x         z
[1,] Frank  -0.2928611  0.07215896  1.835106
[2,]  Tony   0.9120795 -1.11153056  2.041260
[3,]    Ed   1.0498359  5.77131778 -1.253741
我有一种唠叨的感觉,这个问题是在不到一个星期前被问到的,但是当我尝试这个问题时,我认为我没有达到这种方法,我不记得任何答案都是这个问题.
哦,它在r-help上.马修可以根据自己的意愿评论这种合法性.我想消息是返回列表的函数不会丢弃维度.有趣的是,使用list(coef(lm(...))没有按照我们希望的方式成功.