我在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中怎么做?非常感谢
发布于 2020-08-27 12:26:18
这在很大程度上取决于“不完美的命中”是什么样子。假设行名是真实名称的子字符串,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]当然,如果不完美的命中意味着更复杂的东西,您可能需要从行名或类似的东西创建正则表达式。
https://stackoverflow.com/questions/63605719
复制相似问题