r-使用列表中的匹配项或部分匹配项重命名数据帧中的row.name



我在R中有一个341行的数据帧。我想使用一个包含349个名称的列表来重命名行名称。所有341个名字肯定都在这个名单上。但并不是所有的歌曲都是完美的。数据看起来像这个

rownames(df_RPM1)
[1] "LQNS02059392.1_11686_5p"
[2] "LQNS02277998.1_30984_3p"
[3] "LQNS02277998.1_30984_5p"
[4] "LQNS02277998.1_30988_3p"
[5] "LQNS02277998.1_30988_5p"
[6] "LQNS02277997.1_30943_3p"
[7] "miR-9|LQNS02278070.1_31740_3p"
[8] "miR-9|LQNS02278094.1_36129_3p" 
head(inlist)
[1] "dpu-miR-2-03_LQNS02059392.1_11686_5p"  "dpu-miR-10-P2_LQNS02277998.1_30984_3p"
[3] "dpu-miR-10-P2_LQNS02277998.1_30984_5p" "dpu-miR-10-P3_LQNS02277998.1_30988_3p"
[5] "dpu-miR-10-P3_LQNS02277998.1_30988_5p" "miR-9|LQNS02278070.1_31740_3p" 
[6] "miR-9|LQNS02278094.1_36129_3p" 

两者的顺序不一定相同。

有人能建议我如何在R中做到这一点吗?非常感谢

很大程度上取决于;非完美命中";看起来像。假设行名是真实名称的子字符串,str_detect()可以很好地完成任务:

library(tidyverse)
real_names <- c("dpu-miR-2-03_LQNS02059392.1_11686_5p",
"dpu-miR-10-P2_LQNS02277998.1_30984_3p",
"dpu-miR-10-P2_LQNS02277998.1_30984_5p",
"dpu-miR-10-P3_LQNS02277998.1_30988_3p",
"dpu-miR-10-P3_LQNS02277998.1_30988_5p",
"miR-9|LQNS02278070.1_31740_3p",
"miR-9|LQNS02278094.1_36129_3p")
str_which(real_names, "LQNS02059392.1_11686_5p")
#> [1]  1

因此,我们可以向量化(我删除了示例列表中没有的元素6(:

pos <- map_int(rownames(df_RPM1), ~ str_which(real_names, fixed(.)))
pos
#> [1] 1 2 3 4 5 6 7

剩下的就是更改行名:

rownames(df_RPM1) <- real_names[pos]

当然,如果非完美命中意味着更复杂的内容,您可能需要根据行名或类似的内容创建regex。

最新更新