在矢量中保留一个不符合strsplit()标准的字符串

时间:2016-12-29 19:14:20

标签: r string strsplit

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

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

我想删除&#39;预测:&#39;来自包含它的字符串。

我的脚本如下所示:

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

但是,这是结果: [1] NA&#34;蛋白质STRUBBELIG-RECEPTOR FAMILY 3 [Malus domestica]&#34;

因此,由于某种原因,它删除了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])
}

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

1 个答案:

答案 0 :(得分:1)

要删除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]"