【问题标题】:mean of the rows where the row name is same (matrix in R)行名相同的行的平均值(R 中的矩阵)
【发布时间】:2020-02-07 04:39:10
【问题描述】:

我有一个大矩阵,像这样:

 m:
     0   60   120   180... (column names) 
  0  2    4    5     9
  0  6    8    7     6
  0  5    2    6     4
  0  3    4    1     3
 60  4    5    3     1
 60  4    6    10    2
  .
  .
(row names)  

我想计算具有相同名称的行的平均值。我怎么能在 R 中做到这一点?结果将如下所示:

k:
     0   60   120   180... (column names) 
  0  4   4,5  4,75  5,5
 60  4   5,5  6,5   1,5         
  .
  .
(row names)  

我想这真的很基本,但我就是想不通。我将不胜感激。谢谢!

【问题讨论】:

    标签: r matrix mean


    【解决方案1】:

    这是aggregate 来自base R 的一个选项

    aggregate(m, list(row.names(m)), mean)
    #  Group.1 0  60  120 180
    #1       0 4 4.5 4.75 5.5
    #2      60 4 5.5 6.50 1.5
    

    或使用tapply

    tapply(m, list(row.names(m)[row(m)], colnames(m)[col(m)]), FUN = mean)
    

    或者使用by

    do.call(rbind, by(m, row.names(m), FUN = colMeans))
    #    0  60  120 180
    #0  4 4.5 4.75 5.5
    #60 4 5.5 6.50 1.5
    

    或者split

    t(sapply(split(as.data.frame(m), row.names(m)), colMeans))
    

    数据

    m <- structure(c(2, 6, 5, 3, 4, 4, 4, 8, 2, 4, 5, 6, 5, 7, 6, 1, 3, 
    10, 9, 6, 4, 3, 1, 2), .Dim = c(6L, 4L), .Dimnames = list(c("0", 
    "0", "0", "0", "60", "60"), c("0", "60", "120", "180")))
    

    【讨论】:

      猜你喜欢
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-23
      • 1970-01-01
      • 2018-04-28
      • 2023-03-26
      相关资源
      最近更新 更多