2017-07-29 57 views
0

计算数据帧的子集的平均我有以下data.frame:回路用于在r中

> test 
    a b c 
1 1 4 10 
2 1 5 11 
3 2 6 12 
4 2 7 14 
5 2 8 15 
6 8 9 15 

我想写一个for循环,其将计算矢量b的平均值为每个值向量a。因此,我想下面的输出:

> average 
    1 2 8 
[1] 4.5 7.0 9.0 

我学尝试到目前为止

subset<-data.frame() 
average<-vector(mode="numeric") 
for (i in 1:length(test$a)) { 
    subset<-subset(test,test$a==test$a[i]) 
    average[i]<-mean(subset$b) 
} 

不过,我得到以下结果

> average 
[1] 4.5 4.5 7.0 7.0 7.0 9.0 

这应该是很容易的,但不幸的是我做的似乎没有管理它。

你能帮我一下吗?

非常感谢您提前。

回答

1

一号线......

tapply(test$b,test$a,mean) 

    1 2 8 
4.5 7.0 9.0 

顺便说一句,您的代码不工作,因为你是遍历每个元素的test$a,甚至是重复的值,而不仅仅是unique(test$a)的元素。

+0

我不应该想到循环,毫无意义的复杂。谢谢 – panajach

1

你可以试试这个与data.table在基础R

library(data.table) 
setDT(test) 
test[, mean (b), by = a] 
a V1 
1: 1 4.5 
2: 2 7.0 
3: 8 9.0