用于计算r中数据帧子集的均值的循环

时间:2017-07-29 13:54:00

标签: r loops dataframe subset mean

我有以下data.frame:

> 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循环,它将计算向量a中每个值的向量b的平均值。因此,我想要以下输出:

> 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

这应该相当容易,但遗憾的是我似乎没有管理它。

你能帮帮我吗?

非常感谢您提前。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用data.table

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

答案 1 :(得分:1)

基地R中的一行...

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

  1   2   8 
4.5 7.0 9.0

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