如果元素仅存在于几个向量中,如何从多个向量中删除元素。 例如,如果我有以下2个向量
> Text <- c("AB.txt", "B.txt", "C.txt")
> Text2 <- c("B.txt", "C.txt")
然后我尝试用&#39; A&#39;删除所有元素。使用grep:
> Text[-grep( “A”, Text)]
[1] "B.txt" "C.txt"
然而,当我在Text2上执行此操作时,所有元素都会在网络空间中消失。
> Text2[-grep( “A”, Text2)]
character(0)
如何更改代码以使其适用于所有向量?
提前致谢,
保
答案 0 :(得分: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"
答案 1 :(得分:2)
如果你看一下grep("A", Text2)
实际返回的内容:
grep("A", Text2)
# integer(0)
也就是说,它无法找到“A&#39;在Text2
。因此,Text2[-integer(0)]
不会返回任何内容
您可以使用grepl
来测试角色是否存在(或者在这种情况下不存在,使用!
)
Text[!grepl("A", Text)]
# [1] "B.txt" "C.txt"
Text2[!grepl("A", Text2)]
# [1] "B.txt" "C.txt"
此处,如果字符/模式匹配,grepl
将返回逻辑值。在Text2
的示例中,&#39; A&#39;在任何一个元素中都找不到
grepl("A", Text2)
# [1] FALSE FALSE
所以现在我们可以否定&#39;这个,并且是原始向量的子集,与向Text2[!c(FALSE, FALSE)]
答案 2 :(得分:0)
一种选择是确定我们想要保留的Text2
中的索引。这是 not 出现在grep
输出中的所有索引。
Text2[!c(1:length(Text2)) %in% grep("A", Text2)]