如何从数据框的一列中的所有行中删除特定字符

时间:2018-07-28 18:28:54

标签: r regex subset gsub grepl

我有一个具有两列和几百行的数据框,我们将其命名为df,它看起来像这样-

Name                 Chemical_Formula
PALMITYL-COA         C37H62N7O17P3S1
CPD0-888             C34H52N7O24P2
3-OXOPALMITOYL-COA   C37H60N7O18P3S1
OH-MYRISTOYL         C43H75N3O20P2
CPD-19171            C39H64N7O18P3S1
CPD-15253            C52H99N3O13P2
CPD-12122            C75H112O2
CPD0-937             C149H260N2O78P4
....                 .....
....                 .....

现在,如果某些化合物的Chemical_Formula1结尾,我想从化学式中删除该1。例如,对于第一个化合物PALMITYL-COA,化学式为C37H62N7O17P3S1,其结尾为1。因此,在新数据框中,我希望第一个化合物的化学式为C37H62N7O17P3S

因此,我的新数据框应如下所示-

Name                 Chemical_Formula
PALMITYL-COA         C37H62N7O17P3S
CPD0-888             C34H52N7O24P2
3-OXOPALMITOYL-COA   C37H60N7O18P3S
OH-MYRISTOYL         C43H75N3O20P2
CPD-19171            C39H64N7O18P3S
CPD-15253            C52H99N3O13P2
CPD-12122            C75H112O2
CPD0-937             C149H260N2O78P4
....                 .....
....                 .....

如果所有化学式都没有以数字1结尾,我想保留所有化学式。以1结尾的那些我只想删除那个1,保持公式的其余部分不变。

我一直在寻找使用gsub sub greplsubset函数执行此操作的方法,但不确定使用正则表达式规则给出哪种模式。请帮忙!

2 个答案:

答案 0 :(得分:3)

这里是

df$Chemical_Formula <- gsub("1$", "", df$Chemical_Formula)

1后的美元符号表示字符串的结尾。表示仅将位于末尾的1删除

答案 1 :(得分:2)

以下内容可能会对您有所帮助。我在使用sub的{​​{1}}替代函数来删除R(如果它在元素的末尾为NULL的情况下)。

1

要将此输出保存到同一列中,也请在上面的代码中使用sub("1$","",df$Chemical_Formula)

代码说明:

df$Chemical_Formula <-sub是基于sub的函数,它在R的方法上起作用

sub(regex_needs_to_be_used_to_replace_present_content,"with_new_content",variable):意味着告诉"1$"仅对df名为sub的列中以1结尾的行执行操作(我将在本文中进一步解释)< / p>

Chemical_Formula:如果在任何值中均找到以上匹配项,则根据OP的请求,将行的结尾""替换为NULL。

1:名为df的数据框,名为df$Chemical_Formula的列