首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用向量重命名多列

用向量重命名多列
EN

Stack Overflow用户
提问于 2020-11-06 22:18:36
回答 2查看 95关注 0票数 1

我有基因表达数据,其中列名是Ensembl基因名,包括版本(.xx)。我想用基因符号替换几个列的列名(忽略.xx)。我感兴趣的基因在一个“基因”载体上,相应的Ensembl名称在一个"ensembl“向量中。

代码语言:javascript
复制
df <- tibble(~"sample", ~"Ensembl1111.13", ~"Ensembl2222.1",
             "sample_A", 12, 20)
genes <- c("ACTB", "GAPDH")
ensembl <- c("Ensembl1111", "Ensembl2222")

我试着使用rename_at(),但没有成功。我的语法哪里有错误?有没有更简单/更好的方法?

谢谢!!

代码语言:javascript
复制
df_ren <- df %>%
    rename_at(vars(starts_with(ensembl)), funs(str_replace(., "/.", genes)))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-06 22:24:26

我们可以使用starts_with代替matches,因为starts_with需要一个输入,而如果我们创建一个与| (OR)连接的字符串,matches可以有多个值。

代码语言:javascript
复制
library(dplyr)
library(stringr)
df %>%
   rename_at(vars(matches(str_c(ensembl, collapse="|"))),
          ~genes) 

-output

代码语言:javascript
复制
# A tibble: 1 x 3
#  sample    ACTB GAPDH
#  <chr>    <dbl> <dbl>
1 sample_A    12    20

或者另一个选项是移除以'Ensembl‘开头的列名中的字符,并在.中使用命名的向量。

代码语言:javascript
复制
df %>% 
    rename_at(vars(starts_with("Ensembl")), ~ str_remove(., "\\..*")) %>%
    rename(!!! setNames(ensembl, genes))
# A tibble: 1 x 3
#  sample    ACTB GAPDH
#  <chr>    <dbl> <dbl>
#1 sample_A    12    20
票数 1
EN

Stack Overflow用户

发布于 2020-11-07 02:07:54

您可以从名称中删除"."之后的所有内容,用ensembl替换它,并用genes值替换它。

代码语言:javascript
复制
names(df)[match(ensembl, sub('\\..*', '', names(df)))] <- genes
#  sample    ACTB GAPDH
#  <chr>    <dbl> <dbl>
#1 sample_A    12    20
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64722320

复制
相关文章

相似问题

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