我有一个大型数据集,包括各种主题(ID)的纵向测量,有些变量可以说:
test.df <- data.frame(id=c(rep("A", 50),rep("B", 50)), x1=rnorm(100), x2=rnorm(100))
我想对每个ID的所有记录执行一些数值运算,并将结果返回到同一数据集中。
现在我正在做的是:
test.df <- data.frame(id=c(rep("A", 50),rep("B", 50)), x1=rnorm(50), x2=rnorm(50))
test.df$mean.of.x1<-NA
test.df$mean.of.x2<-NA
for(i in unique(test.df$id)){
test.df$mean.of.x1[test.df$id==i]<-mean(test.df$x1[test.df$id==i])
test.df$mean.of.x2[test.df$id==i]<-mean(test.df$x2[test.df$id==i])
}
这个例子非常简单(也许是愚蠢的),但它显示了我需要的东西(在我原来的问题中,每个ID都有几个函数不仅仅是mean
)。有没有更有效的方法来做到这一点?任何*apply
功能都可以帮助吗?
答案 0 :(得分:2)
transform(test.df, mean.of.x1 = ave(x1, id, FUN=mean),
mean.of.x2 = ave(x2, id, FUN=mean))
答案 1 :(得分:1)
聚合和合并的组合将起到作用。
results = aggregate(x=test.df, list(test.df$id), mean)
test.df.updated = merge(test.df, results, by.x = 1, by.y=1)