2013-05-09 51 views
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函数可以帮助吗?

+0

您的意思是创建像一个示例性测试:test.df < - data.frame(ID = C(REP( “A”,50),代表( “B”,50)) ,x1 = rnorm(100),x2 = rnorm(100))。你现在拥有的方式只是给两个组分配相同的值,所以他们的手段都是一样的 – kith 2013-05-09 16:55:42

+0

是的。感谢那。我纠正了这个问题 – ECII 2013-05-09 18:09:25

回答

2
transform(test.df, mean.of.x1 = ave(x1, id, FUN=mean), 
        mean.of.x2 = ave(x2, id, FUN=mean)) 
+0

多么漂亮的一条班轮。这次真是万分感谢! – ECII 2013-05-09 18:19:44

1

聚合和合并的组合将做的伎俩。

results = aggregate(x=test.df, list(test.df$id), mean) 
test.df.updated = merge(test.df, results, by.x = 1, by.y=1) 
相关问题