我有一个数据框,其中的“ SampleID”列包含一系列样本ID,所有这些ID以“ _Dup”结尾。我想从列中的所有行名称中删除“ _Dup”后缀。
以下是df的示例:
df
SampleID Concentration
sample1_Dup 1
sample2_Dup 2
sample3_Dup 3
我要寻找的结果是这样:
df
SampleID Concentration
sample 1 1
sample 2 2
sample 3 3
我已经使用base R和tidyverse搜索了此问题的解决方案,但是在修改列中的所有行名称时找不到任何东西。
答案 0 :(得分:2)
尝试使用sub
:
df$SampleID <- sub("(\\d+)_[^_]+$", " \\1", df$SampleID)
df$SampleID
[1] "sample 1" "sample 2" "sample 3"
此处的策略是匹配和来捕获样本编号,然后是最后的下划线和其余的样本ID。然后,我们只用一个空格替换该捕获的样本号。
答案 1 :(得分:0)
您可以将列拆分为2,然后删除不需要的列。
separate(data, col, into, sep = "[^[:alnum:]]+", remove = TRUE,
convert = FALSE, extra = "warn", fill = "warn", ...)
答案 2 :(得分:0)
tidyverse风格的解决方案:
df %>%
mutate(SampleID = SampleID %>% str_replace('(.*)([0-9])_Dup$', '\\1 \\2'))
tidyverse样式的字符串操作功能来自stringr
,并且所有名称都以str_XYZ
之类的名称开头。他们能够使用正则表达式。在这里,我们使用了“命名组”-这是括号内正则表达式的一部分。第一个命名的组(*.)
是任何单个数字之前的所有内容。单个数字是第二个命名组(([0-9])
)。在str_replace
的第三个参数\\1 \\2
中,我们将两个部分以及它们之间的空格放在一起。
答案 3 :(得分:0)
我想我会像这样创建一个新变量。
df$new_var<-substr(df$SampleID, 1,7)
应采用字符串的前7个字符并将其放在新列中。