2016-12-21 46 views
1

如何從多個向量中刪除元素(如果它們僅存在於少數向量中)。 例如,如果我有以下2個載體R:從多個向量中刪除元素(如果僅存在於幾個向量中)

> Text <- c("AB.txt", "B.txt", "C.txt") 
> Text2 <- c("B.txt", "C.txt") 

然後我嘗試用「A」刪除所有元素用grep:

> Text[-grep(「A」, Text)] 
[1] "B.txt" "C.txt" 

但是我做這個文本2的所有元素消失時網絡空間。

> Text2[-grep(「A」, Text2)] 
character(0) 

如何更改代碼以使其適用於所有向量?

由於提前,

保羅

+0

感謝所有答案,他們都很好。 – PaulH

回答

2

如果你看一下grep("A", Text2)真的返回:

grep("A", Text2) 
# integer(0) 

也就是說,它不能在Text2找到 'A'。因此,你的Text2[-integer(0)]將不會返回任何

您可以使用grepl測試是否字符存在(或在這種情況下不存在,用!

Text[!grepl("A", Text)] 
# [1] "B.txt" "C.txt" 
Text2[!grepl("A", Text2)] 
# [1] "B.txt" "C.txt" 

這裏,grepl回報一個邏輯值,如果字符/模式匹配。在這個例子Text2,「A」是不是在任一元素

grepl("A", Text2) 
# [1] FALSE FALSE 

所以,現在發現我們不能否定「這和劃分原來的載體,它是與進入Text2[!c(FALSE, FALSE)]

2

可以使用invert參數:

Text[grep("A", Text, fixed = TRUE, invert = TRUE)] 
#[1] "B.txt" "C.txt" 
Text2[grep("A", Text2, fixed = TRUE, invert = TRUE)] 
#[1] "B.txt" "C.txt" 
0

一種選擇是,以確定哪些我們不希望保留在Text2指數。這是而不是出現在grep輸出中的所有索引。

Text2[!c(1:length(Text2)) %in% grep("A", Text2)] 
相關問題