1

我有一个大型数据集,其中包含各种主题 (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功能可以帮忙吗?

4

2 回答 2

2
transform(test.df, mean.of.x1 = ave(x1, id, FUN=mean), 
                   mean.of.x2 = ave(x2, id, FUN=mean))
于 2013-05-09T16:55:39.813 回答
1

聚合和合并的组合可以解决问题。

results = aggregate(x=test.df, list(test.df$id), mean)
test.df.updated = merge(test.df, results, by.x = 1, by.y=1)
于 2013-05-09T16:45:15.737 回答