【问题标题】:R, reorganizing a vector by computing means of values according to another vectorR,通过根据另一个向量计算值来重组向量
【发布时间】:2013-04-24 15:54:15
【问题描述】:

我有 2 个向量:

a <- c(6,5,3,1,6,7,4,5,3,2)
b <- c(2,1,1,2,3,2,1,3,3,2)

我想要一个简单的代码,它返回一个向量,该向量由向量“a”中所有值的平均值组成,在 b 中存在相同值的位置。此外,我希望它的排序方式与 b 的级别相同(levels(as.factor(b)))。

solution = c(mean(5,3,4),mean(6,1,7,2),mean(6,5,3))

更简单的例子:

a <- c(1,2,3,4)
b <- c(1,2,2,1)
solution <- c(2.5,2.5)

非常感谢!

【问题讨论】:

    标签: r vector reorganize


    【解决方案1】:
    b <- factor(b, levels=c(2,1,3)) ## Sets the order of the factor's levels.
    tapply(a, b, FUN=mean)
    #        2        1        3 
    # 4.000000 4.000000 4.666667 
    

    【讨论】:

      【解决方案2】:

      有几种方法可以实现这一点。 @Ananda 已经提到了一个。一些替代方案是:

      aggregate(a,list(b),mean)
      ddply(as.data.frame(a),.(b),summarize,mean=mean(a)) # require(plyr)
      by(a,b,mean) # this is just a wrapper for tapply
      

      选择取决于您想要的输出格式和实际数据的输入格式(例如向量与数据帧)。

      【讨论】:

        【解决方案3】:

        data.table 解决方案:

        library(data.table)
        d = data.table(a = c(6,5,3,1,6,7,4,5,3,2), b = c(2,1,1,2,3,2,1,3,3,2))
        
        d[, mean(a), by = b][order(b)] # (or [order(b), V1] if you just want the means)
        

        【讨论】:

          猜你喜欢
          • 2014-09-10
          • 1970-01-01
          • 2021-07-28
          • 1970-01-01
          • 2014-02-09
          • 1970-01-01
          • 2021-07-26
          • 2022-06-28
          • 1970-01-01
          相关资源
          最近更新 更多