是否有R函数可以删除部分行名?

时间:2019-08-08 22:30:11

标签: r

我有一个数据框,其中的“ 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搜索了此问题的解决方案,但是在修改列中的所有行名称时找不到任何东西。

4 个答案:

答案 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个字符并将其放在新列中。