![](/img/trans.png)
[英]if variable name in data frame column matches names in a vector rename variable
[英]Rename row.name in data frame using matches or partial matches from a list
我在 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]
当然,如果不完美的命中意味着更复杂的事情,您可能需要根据行名称或类似内容创建正则表达式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.