【问题标题】:R: Is there a column version for "rowsum", but to compute the mean and not just the sum?R:“rowsum”是否有列版本,但要计算平均值而不仅仅是总和?
【发布时间】:2018-11-12 20:36:35
【问题描述】:

我有一个矩阵,列根据分组变量分组:

x <- matrix(sample(1:10,20,T),ncol=4)
     [,1] [,2] [,3] [,4]
[1,]    7    8    5    3
[2,]    7    5    4    7
[3,]    7    1    9    3
[4,]    4    8    8    8
[5,]    9    9    1    5

group <- sample(1:2, 4, TRUE)
[1] 1 2 1 2

计算按列分组变量分组的每一行的平均值的最优雅方法是什么?所示示例的结果应该是 5 x 2 矩阵:

       1   2
[1,] 6.0 5.5
[2,] 5.5 6.0
[3,] 8.0 2.0
[4,] 6.0 8.0
[5,] 5.0 7.0

我查看了rowsum 命令,但它通过分组变量对行求和,并且没有现成的选项来计算平均值。

如果有任何帮助,我将不胜感激。

【问题讨论】:

  • 但据我所知,该命令不采用分组变量。有没有办法可以为colSumscolMeans 使用分组变量?
  • 您通常会分组然后应用该功能。这就是为什么我们有这么多apply 函数。通过这种方式,您可以创建更灵活的函数,而不是 one pony trick 类型的函数

标签: r rowsum


【解决方案1】:

我们可以使用 data.frame 上的 split.default by 'group' 按列拆分,然后在 data.frames 的 list 上执行 rowMeans

sapply(split.default(as.data.frame(x), group), rowMeans)
#      1   2
#[1,] 6.0 5.5
#[2,] 5.5 6.0
#[3,] 8.0 2.0
#[4,] 6.0 8.0
#[5,] 5.0 7.0

数据

x <- structure(c(7, 7, 7, 4, 9, 8, 5, 1, 8, 9, 5, 4, 9, 8, 1, 3, 7, 
       3, 8, 5), .Dim = 5:4)
group <- c(1, 2, 1, 2)

【讨论】:

    猜你喜欢
    • 2012-02-18
    • 2012-07-12
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2019-08-28
    • 2018-11-05
    相关资源
    最近更新 更多