【问题标题】:Retaining a character string in the vector that doesn't meet strsplit() criteria在向量中保留不符合 strsplit() 条件的字符串
【发布时间】:2016-12-29 19:14:19
【问题描述】:

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

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] NA“蛋白质 STRUBBELIG-受体家族 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])
}

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

【问题讨论】:

标签: r string strsplit


【解决方案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]"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 2018-12-25
    • 1970-01-01
    • 2021-10-28
    • 2020-05-28
    • 1970-01-01
    相关资源
    最近更新 更多