首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用列表中的匹配项或部分匹配项重命名数据框中的row.name

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

Stack Overflow用户
提问于 2020-08-27 05:04:00
回答 1查看 113关注 0票数 0

我在R中有一个341行的数据帧。我想使用包含349个名称的列表来重命名行名称。所有341个名字肯定会出现在这份名单中。但并不是所有的都是完美的热门。数据如下所示

代码语言:javascript
复制
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中怎么做?非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-27 12:26:18

这在很大程度上取决于“不完美的命中”是什么样子。假设行名是真实名称的子字符串,str_detect()可以很好地完成这项工作:

代码语言:javascript
复制
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):

代码语言:javascript
复制
pos <- map_int(rownames(df_RPM1), ~ str_which(real_names, fixed(.)))
pos
#> [1] 1 2 3 4 5 6 7

剩下的就是修改行名了:

代码语言:javascript
复制
rownames(df_RPM1) <- real_names[pos]

当然,如果不完美的命中意味着更复杂的东西,您可能需要从行名或类似的东西创建正则表达式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63605719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档