我使用plyr包按主题和年份运行面板数据的回归。我只想使用R plyr函数复制来自base的输出。特别是,plyr包保留主题和年份变量名,但base函数不保留。是否可以仅使用R plyr函数复制base输出?下面是我尝试过的代码示例:
data <- data.frame(SUBJECT=c(rep('FISHER',10), rep('HUNTER',10)), YEAR=c(rep(2011,5), rep(2012,5), rep(2011,5), rep(2012,5)), y=rnorm(20), x=rnorm(20))
data只使用R base函数
with(data, t(sapply(split(data, list(SUBJECT,YEAR), drop=TRUE), function(x) { coef(lm(y ~ x, data = x)) })))使用plyr函数
library(plyr)
ddply(data, .(SUBJECT,YEAR), function(x) { coef(lm(y ~ x, data = x)) })发布于 2013-09-16 16:46:12
试试这个(ix <- 1:2也会起作用):
ix <- c("SUBJECT", "YEAR")
reg <- function(DF) cbind( DF[1, ix], t(coef(lm(y ~ x, DF))) )
do.call(rbind, by(data, data[ix], reg))这意味着:
SUBJECT YEAR (Intercept) x
1 FISHER 2011 0.8665496 0.25377389
2 HUNTER 2011 0.4954567 0.05370458
3 FISHER 2012 0.5280182 0.95038956
4 HUNTER 2012 -0.8319516 -0.04778639发布于 2013-09-16 16:33:35
我通常自己使用plyr来执行这类任务,所以我猜想在基本R中有一种更干净的方法可以实现这一点,但是这里有一个解决方案:
> runRegression <- function(v){
+ sub <- data[data$SUBJECT == v[1] & data$YEAR == v[2],]
+ coef(lm(y ~ x, data = sub))
+ }
>
> cbind(unique(data[,c("SUBJECT","YEAR")]),t(apply(unique(data[,c("SUBJECT","YEAR")]),1,runRegression)))
SUBJECT YEAR (Intercept) x
1 FISHER 2011 0.3409430 0.2860310
6 FISHER 2012 0.1065906 0.5851614
11 HUNTER 2011 -0.3774422 0.9029407
16 HUNTER 2012 0.1697793 -0.5429523https://stackoverflow.com/questions/18832858
复制相似问题