[英]R: Delete element from multiple vectors if only present in a few vectors
如果多个矢量中仅包含几个元素,该如何删除它们。 例如,如果我有以下两个向量
> 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"
但是,当我在Text2上执行此操作时,所有元素都会消失在网络空间中。
> Text2[-grep( “A”, Text2)]
character(0)
如何更改代码,使其适用于所有矢量?
提前致谢,
保罗
您可以使用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"
如果查看一下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)]
一种选择是确定我们要保留的Text2
中的索引。 这是所有未出现在grep
输出中的索引。
Text2[!c(1:length(Text2)) %in% grep("A", Text2)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.