【问题标题】:Rename column names by pattern [duplicate]按模式重命名列名[重复]
【发布时间】:2021-11-03 05:20:48
【问题描述】:
我想重命名我的列,因为它太长了,例如:
chrX:99883666-99894988_TSPAN6_ENSG00000000003.10 到 TSPAN6
chrX:99839798-99854882_TNMD_ENSG00000000005.5 到 TNMD
chr20:49505584-49575092_DPM1_ENSG00000000419.8 到 DPM1
考虑到我要删除的元素与每列不同,我该如何重命名它?
【问题讨论】:
标签:
r
regex
dataframe
rename
【解决方案1】:
使用strsplit我们可以试试:
names(df) <- strsplit(names(df), "_")[[1]][2]
如果您只想定位某个名称子集,则只需使用该逻辑过滤 names(df)。
【解决方案2】:
您可以使用正则表达式来做到这一点。提取两个下划线之间的单词怎么样?
x <- c("chrX:99883666-99894988_TSPAN6_ENSG00000000003.10",
"chrX:99839798-99854882_TNMD_ENSG00000000005.5",
"chr20:49505584-49575092_DPM1_ENSG00000000419.8")
sub('.*?_(\\w+)_.*', '\\1', x)
#[1] "TSPAN6" "TNMD" "DPM1"
对于列的名称,您可以使用names(df) 而不是x。
names(df) <- sub('.*?_(\\w+)_.*', '\\1', names(df))
如果你喜欢dplyr -
library(dplyr)
df <- df %>% rename_with(~sub('.*?_(\\w+)_.*', '\\1', .))