我有基因表达数据,其中列名是Ensembl基因名,包括版本(.xx)。我想用基因符号替换几个列的列名(忽略.xx)。我感兴趣的基因在一个“基因”载体上,相应的Ensembl名称在一个"ensembl“向量中。
df <- tibble(~"sample", ~"Ensembl1111.13", ~"Ensembl2222.1",
"sample_A", 12, 20)
genes <- c("ACTB", "GAPDH")
ensembl <- c("Ensembl1111", "Ensembl2222")我试着使用rename_at(),但没有成功。我的语法哪里有错误?有没有更简单/更好的方法?
谢谢!!
df_ren <- df %>%
rename_at(vars(starts_with(ensembl)), funs(str_replace(., "/.", genes)))发布于 2020-11-06 22:24:26
我们可以使用starts_with代替matches,因为starts_with需要一个输入,而如果我们创建一个与| (OR)连接的字符串,matches可以有多个值。
library(dplyr)
library(stringr)
df %>%
rename_at(vars(matches(str_c(ensembl, collapse="|"))),
~genes) -output
# A tibble: 1 x 3
# sample ACTB GAPDH
# <chr> <dbl> <dbl>
1 sample_A 12 20或者另一个选项是移除以'Ensembl‘开头的列名中的字符,并在.中使用命名的向量。
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发布于 2020-11-07 02:07:54
您可以从名称中删除"."之后的所有内容,用ensembl替换它,并用genes值替换它。
names(df)[match(ensembl, sub('\\..*', '', names(df)))] <- genes
# sample ACTB GAPDH
# <chr> <dbl> <dbl>
#1 sample_A 12 20https://stackoverflow.com/questions/64722320
复制相似问题