2012-01-17 82 views
25

看來,雖然grep有一個反相參數,但grepl沒有。grepl:在一個不包含模式的字符串中搜索

我想子集使用2個過濾器

data$ID[grepl("xyx", data$ID) & data$age>60] 

我怎麼能子集不包含「XY-X」年齡> 60和ID ?我做的是

data$ID[abs(grepl("xyx", data.frame$ID)-1) & data$age>60] 

這顯然有效,但看起來可怕和不直觀。有更好的解決方案/參數嗎?

由於

回答

41

grepl返回邏輯矢量。如果你想得到相反的結果,你可以使用!運算符。

data$ID[!grepl("xyx", data$ID) & data$age>60] 
+0

看起來很可愛。謝謝。 – ECII 2012-01-17 21:25:26

+0

不客氣。你不是很高興你只需輸入'!'而不是'invert = TRUE'? ;-) – 2012-01-17 21:26:02

+0

與(abs() - 1)相比,唯一的'!'看起來好多了....也許你有20k +名聲的專家可能會找到一些時間,並寫一篇關於R中字符串操作的好的評論文章。就像喬蘭做的關於應用這裏的家庭http://stackoverflow.com/questions/3505701/r-grouping-functions-sapply-vs-lapply-vs-apply-vs-tapply-vs-by-vs-aggrega – ECII 2012-01-17 21:31:34

相關問題