【问题标题】:Sort matrix colnames to match element order in a list对矩阵列名进行排序以匹配列表中的元素顺序
【发布时间】:2021-08-22 00:47:31
【问题描述】:

我有一个特定的列表,例如:

my_list<-list("Cluster18904", "Cluster6294", "Cluster17424", "Cluster26257", 
     "Cluster27053", "Cluster2905", "Cluster16096", "Cluster14552")

看起来像:

my_list

[[1]]
[1] "Cluster18904"

[[2]]
[1] "Cluster6294"

[[3]]
[1] "Cluster17424"

[[4]]
[1] "Cluster26257"

[[5]]
[1] "Cluster27053"

[[6]]
[1] "Cluster2905"

[[7]]
[1] "Cluster16096"

[[8]]
[1] "Cluster14552"

我有一个具有相同列名的矩阵,但我正在寻找一种解决方案,以便对矩阵的列进行排序以匹配与my_list中相同的顺序

我试过了:

as.data.frame(matrix)[,my_list]

但我明白了:

.subset(x, j) 中的错误:'list' 不正确的索引类型

【问题讨论】:

    标签: r dataframe matrix


    【解决方案1】:

    我们需要unlist

    as.data.frame(matrix)[, unlist(my_list)]
    

    如果有列名不匹配,则使用intersect

    dat1 <- as.data.frame(matrix)
    nm1 <- intersect(names(dat1), unlist(my_list))
    dat1[nm1]
    

    【讨论】:

      【解决方案2】:

      另一个基本 R 选项

      as.data.frame(matrix)[simplify2array(my_list)]
      

      【讨论】:

        【解决方案3】:

        这将根据列表名称对列名称进行排序,首先将列表名称转换为字符串向量。

        matrix[,match(colnames(matrix),as.character(my_list))]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-29
          • 2014-07-03
          • 1970-01-01
          • 1970-01-01
          • 2020-10-05
          相关资源
          最近更新 更多