【问题标题】:How to map list elements to colnames of matrix in R如何将列表元素映射到R中矩阵的列名
【发布时间】:2019-08-09 05:25:09
【问题描述】:

我有一个没有列名的矩阵,如下所示:

>my_matrix
                        [,1]         [,2]         [,3]                  
ENSG00000000345 1.324266e+03 1.071842e+03 1.024920e+03 
ENSG00000000105 3.750147e+01 8.081121e+02 4.736242e+01 
ENSG00000000719 3.216755e+03 2.001329e+03 1.934501e+03 

总共有 280 列和数千行。

我还有一个二元素向量列表,如下所示:

> head(mapping)
[[1]]
[1] "100"        "bob"

[[2]]
[1] "10"         "alice"

[[3]]
[1] "1"          "mark"

[[4]]
[1] "101"        "simon"

[[5]]
[1] "102"        "jeff"

[[6]]
[1] "103"        "alexander"

列表中有 280 个向量。每个向量中的第一个元素是数字 1 到 280。第二个元素是唯一的字符串。

我想让矩阵的列名成为映射列表中的唯一字符串(每个向量的第二个元素),使用每个向量的第一个元素来对应矩阵的列索引。

例如,第 1 列将是“标记”。

我正在努力解决向量的顺序与矩阵列索引不对应的事实。如果是这样的话,这样的事情会起作用:

 colnames(my_matrix) <- lapply(mapping, `[[`, 2)

有人可以帮忙吗?提前谢谢你。

【问题讨论】:

  • 试试m1 &lt;- do.call(rbind, mapping); colnames(my_matrix)[as.numeric(m1[,1])] &lt;- m1[,2]
  • @akrun 这工作得很好。谢谢!

标签: r


【解决方案1】:

您可以尝试以下方法:

names.vec = sapply(mapping, unlist)[2,]
> names.vec
[1] "bob"       "alice"     "mark"      "simon"     "jeff"      "alexander"

然后将这些指定为矩阵的列名

colnames(my_matrix) = names.vec

使用示例数据的前 6 个条目:

mapping = list()

mapping[[1]] = c("100", "bob")
mapping[[2]] = c("10", "alice")
mapping[[3]] = c("1", "mark")
mapping[[4]] = c("101", "simon")
mapping[[5]] = c("102", "jeff")
mapping[[6]] = c("103", "alexander")
> mapping
[[1]]
[1] "100" "bob"

[[2]]
[1] "10"    "alice"

[[3]]
[1] "1"    "mark"

[[4]]
[1] "101"   "simon"

[[5]]
[1] "102"  "jeff"

[[6]]
[1] "103"       "alexander"

names.vec = sapply(mapping, unlist)[2,]
> names.vec
[1] "bob"       "alice"     "mark"      "simon"     "jeff"      "alexander"

colnames(my_matrix) = names.vec

【讨论】:

    【解决方案2】:

    您可以获取索引的数字并将它们放入向量中,并使用名称进行相同的操作,然后将其放入矩阵的列名中,如下所示:

    inds <- as.numeric(lapply(mapping,function(x)x[1]))
    nms <- lapply(mapping,function(x)x[2]) #unlist it if you need to
    colnames(my_matrix)[inds] <- nms
    

    【讨论】:

      【解决方案3】:

      @akrun 在 cmets 中正确回答了这个问题。代码:

      m1 <- do.call(rbind, mapping); colnames(my_matrix)[as.numeric(m1[,1])] <- m1[,2]
      

      【讨论】:

        猜你喜欢
        • 2021-06-18
        • 2021-12-03
        • 1970-01-01
        • 2013-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-26
        • 2014-05-09
        相关资源
        最近更新 更多