我有以下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
这应该相当容易,但遗憾的是我似乎没有管理它。
你能帮帮我吗?
非常感谢您提前。
答案 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)
的元素。