在不满足 strsplit() 条件的向量中保留字符串

Retaining a character string in the vector that doesn't meet strsplit() criteria

我有不同的字符串,如下所示:

t <- c("probable linoleate 9S-lipoxygenase 5 [Malus domestica]", "PREDICTED:  protein STRUBBELIG-RECEPTOR FAMILY 3 [Malus domestica]")

我想从包含它的字符串中删除 'PREDICTED:'。

我的脚本如下所示:

t <- sapply(strsplit(t, split= ": ", fixed = TRUE), function(x) (x[2]))

但是,这是结果: [1] 不适用 "protein STRUBBELIG-RECEPTOR FAMILY 3 [Malus domestica]"

所以,不知为何,它擦除了t[1],并正确地对t[2]进行了操作。我尝试将 grep() 添加到我的字符串中:

t <- sapply(strsplit(t, if(grep('^*.', t), split= ": " else t, fixed = TRUE), function(x) (x[2]))). 

我也试过写一个循环:

for(i in t){
  if(i == grep('PREDICTED', t[i]) split= ": " else t[i])
}

非常感谢任何帮助。 谢谢!

要删除 PREDICTED: 单词,您可以使用简单的非正则表达式 sub:

t <- c("probable linoleate 9S-lipoxygenase 5 [Malus domestica]", "PREDICTED:  protein STRUBBELIG-RECEPTOR FAMILY 3 [Malus domestica]")
sub("PREDICTED:  ", "", t, fixed=TRUE)

online R demo

如果第一个冒号之前的单词可以是任意的,请使用正则表达式解决方案:

t <- c("probable linoleate 9S-lipoxygenase 5 [Malus domestica]", "PREDICTED:  protein STRUBBELIG-RECEPTOR FAMILY 3 [Malus domestica]")
sub("^[^:]*:\s*", "", t)

参见 another demo。在这里,^[^:]*:\s* 匹配字符串开头除 : 以外的 0+ 个字符,然后是 :,然后是 0+ 个空格(由于使用了 sub,所以只匹配一次, 不是 gsub.

在这两种情况下,输出是相同的:

[1] "probable linoleate 9S-lipoxygenase 5 [Malus domestica]"
[2] "protein STRUBBELIG-RECEPTOR FAMILY 3 [Malus domestica]"