2016-12-21 3 views
1

複数のベクトルが少数のベクトルに存在する場合、その要素を削除する方法を教えてください。私は、次の2つのベクトルR:いくつかのベクトルにのみ存在する場合、複数のベクトルから要素を削除する

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

を持っている場合、例えば は、その後、私はgrepのを使用して「A」を持つすべての要素を削除しよう:

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

私はテキスト2でこれを行うときしかし、すべての要素がで消えますサイバースペース。

> Text2[-grep(“A”, Text2)] 
character(0) 

どのようにコードを変更してすべてのベクターで機能させることができますか?

事前のおかげで、

ポール

+0

おかげで行くと同じである元のベクトルを、サブセットのいずれかの要素に

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

が見つかりません答え、彼らはすべて正常に動作します。 – PaulH

答えて

2

あなたは何grep("A", Text2)を見れば、実際に戻っている:

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

が、それはText2に 'A' を見つけることができません。したがって、あなたのText2[-integer(0)]は、ここで

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

greplリターンをあなたは文字が存在する(または!を使用して、この場合には存在しない)かどうかをテストするgreplを使用することができます何でも

を返しません文字/パターンが一致する場合は論理値。 Text2ため、この例では、「」だから今、私たちは「否定」することができ、この、およびすべてのため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

1つのオプションは、我々が保持したいんText2内のインデックスを決定することです。これはすべてでないの出力がgrepの出力に表示されるインデックスです。

Text2[!c(1:length(Text2)) %in% grep("A", Text2)] 
関連する問題