r - 如何将列表元素映射到R中矩阵的列名
问题描述
我有一个没有列名的矩阵,如下所示:
>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)
有人能帮忙吗?先感谢您。
解决方案
您可以尝试以下方法:
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
推荐阅读
- typo3 - 在项目文件中而不是在后端编写打字稿
- python - 在全屏模式下在 Raspberry pi 上的背景图像上创建文本
- python - 如何切换到 iframe 窗口?
- javascript - jQuery - 禁用:不是选择器 CSS
- java - 无法在 IntelliJ IDEA 中设置主类
- python-3.x - PyQt5:设置中央小部件
- rust - 如何在 actix 中创建应用程序/json HTTPResponse?
- html - 溢出的弹性容器的孩子超过容器
- php - PHP INSERT 到 MySQL 数据库的问题
- python - 使用全栈 Python 应用程序打包数据库