【问题标题】:Loop for calculating mean of subset of data frame in r [duplicate]用于计算r中数据帧子集平均值的循环[重复]
【发布时间】:2018-01-05 12:00:37
【问题描述】:

我有以下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

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

你能帮帮我吗?

提前非常感谢您。

【问题讨论】:

    标签: r loops dataframe subset mean


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      base R 中的一行...

      tapply(test$b,test$a,mean)
      
        1   2   8 
      4.5 7.0 9.0
      

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

      【讨论】:

      • 我不应该想到循环,毫无意义的复杂。谢谢
      猜你喜欢
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 2018-07-07
      • 2014-10-01
      相关资源
      最近更新 更多