我有一个具有两列和几百行的数据框,我们将其命名为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_Formula
以1
结尾,我想从化学式中删除该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 grepl
或subset
函数执行此操作的方法,但不确定使用正则表达式规则给出哪种模式。请帮忙!
答案 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
的列