2016-12-29 78 views
1

我有一個看起來像這樣不同的字符串:保留在載體中的字符串不符合strsplit()標準

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

我想刪除了「預言:」從包含字符串它。

我的劇本是這樣的:

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

但是,這是結果: [1] NA 「蛋白質STRUBBELIG受體家族3海棠斯蒂卡]」

所以,出於某種原因,它消除了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]) 
} 

任何幫助是極大的讚賞。 謝謝!

+3

爲什麼不使用['GSUB( 「PREDICTED:」, 「」,T,固定= TRUE)']?(http://ideone.com/GXXaMx),或者可以是有任何前字第一個':'? –

回答

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]" 
相關問題