【问题标题】:row and column matrix sum in R by groupR中的行和列矩阵按组求和
【发布时间】:2020-06-20 20:21:45
【问题描述】:

我有一个矩阵matrix,其中包含两个级别的分组,如行名和列名所示。

           UKC1_SS1   UKC1_SS2   UKC2_SS1   UKC2_SS2
UKC1_SS1       1          2          3          4
UKC1_SS2       5          6          7          8
UKC2_SS1       9         10         11         12
UKC2_SS2      13         14         15         16

我想使用基于列名和行名的前四位数字的列和行总和创建一个表:

      UKC1   UKC2   
UKC1    14     22  
UKC2    46     54  

我尝试依次计算rowsumscolSums

sum.matrix <- rowsum(matrix, substr(rownames(matrix), start = 1, stop = 4))
sum.matrix <- colSums(sum.matrix, substr(colnames(test), start = 1, stop = 4)

但我收到以下错误消息: colSums(test, substr(colnames(test), start = 1, stop = 4)) 中的错误: 'na.rm' 参数无效

当我运行 sum(is.na) 时,我确认 matrix 中有 NA 值。

【问题讨论】:

    标签: r matrix sum rowsum


    【解决方案1】:

    在将dimnames 更改为第一个4 个字符的substr 之后,我们可以使用xtabs 来执行sum

    dimnames(m1) <- lapply(dimnames(m1), substr, 1, 4)
    xtabs(Freq~ Var1 + Var2, as.data.frame.table(m1))
    #      Var2
    #Var1   UKC1 UKC2
    #  UKC1   14   22
    #  UKC2   46   54
    

    数据

    m1 <- structure(c(1L, 5L, 9L, 13L, 2L, 6L, 10L, 14L, 3L, 7L, 11L, 15L, 
    4L, 8L, 12L, 16L), .Dim = c(4L, 4L), .Dimnames = list(c("UKC1_SS1", 
    "UKC1_SS2", "UKC2_SS1", "UKC2_SS2"), c("UKC1_SS1", "UKC1_SS2", 
     "UKC2_SS1", "UKC2_SS1.1")))
    

    【讨论】:

    • 谢谢,它有效!只是补充一下,我的问题中有一个错字,现在已更正。第 4 列的列名应该是 UKC2_SS2 而不是 UKC2_SS1,所以不需要将 m1 的最后一列命名为 UKC2_SS1.1。
    猜你喜欢
    • 2020-08-26
    • 1970-01-01
    • 2017-06-01
    • 2015-06-10
    • 1970-01-01
    • 2016-07-25
    • 2019-01-27
    • 2021-04-04
    • 1970-01-01
    相关资源
    最近更新 更多