【问题标题】:Sorting a matrix rowname based on column of another matrix根据另一个矩阵的列对矩阵行名进行排序
【发布时间】:2019-03-28 17:43:57
【问题描述】:

我有两个类似于下面的矩阵:

a b c d             id1   id2  id3   id4
1 2 3 4              b     1    2    3
6 7 8 9              c     0    2    4
                     d     1    2    2
                     a     5    6    8

预期输出如下:

     b c d a
[1,] 2 3 4 1
[2,] 7 8 9 6

我想根据第二个矩阵的第一列(id1)对左矩阵的行名进行排序。 有没有人有任何建议如何处理? 我只是在尝试“第一个矩阵”[colnames(“第二个矩阵”),]。但这并不容易。

谢谢

【问题讨论】:

    标签: r sorting matrix row


    【解决方案1】:

    你可以的

    first_mat[,second_mat[, 1]]
    
    #     b c d a
    #[1,] 2 3 4 1
    #[2,] 7 8 9 6
    

    数据

    first_mat <- structure(c(1L, 6L, 2L, 7L, 3L, 8L, 4L, 9L), .Dim = c(2L, 
      4L), .Dimnames = list(
      NULL, c("a", "b", "c", "d")))
    
    second_mat <- structure(c("b", "c", "d", "a", "1", "0", "1", "5", "2", "2", 
      "2", "6", "3", "4", "2", "8"), .Dim = c(4L, 4L), .Dimnames = list(
       NULL, c("id1", "id2", "id3", "id4")))
    

    【讨论】:

    • 亲爱的 Ronak, 感谢您的回答!由于某些原因,该解决方案无法正常工作!它没有相应地排序,它还会创建重复项。例如 a-1 b-1。您知道可能出了什么问题吗?
    • @Amir 你能用你的预期输出更新你的帖子吗?
    • 亲爱的 Ronak,您提到的输出是我所期望的,但在我的矩阵上应用代码不会导致类似的排序
    • @Amir 那么您需要发布一个更接近您的实际矩阵的示例。没有这个就很难猜了。
    • 亲爱的 Ronak,我可以找出问题所在。我应该使用 first_mat[, row.names(second mat)]
    猜你喜欢
    • 1970-01-01
    • 2018-04-09
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 2020-11-04
    • 2020-11-19
    相关资源
    最近更新 更多