【发布时间】:2012-09-27 18:45:28
【问题描述】:
我有一个字符向量,我想从中排除存在于第二个向量中的元素。在这种情况下,我不知道如何在仍然考虑整个向量的情况下进行否定
vector[vector ! %in% vector2]
我显然可以使用vector[vector != single_character],但这仅适用于单个字符。
【问题讨论】:
标签: r
我有一个字符向量,我想从中排除存在于第二个向量中的元素。在这种情况下,我不知道如何在仍然考虑整个向量的情况下进行否定
vector[vector ! %in% vector2]
我显然可以使用vector[vector != single_character],但这仅适用于单个字符。
【问题讨论】:
标签: r
你已经接近了
vector[!vector %in% vector2]
或者,即使你说“不使用 setdiff”
setdiff(vector, vector2)
【讨论】:
vector1 <- letters[1:4]
set.seed(001)
vector2 <- sample(letters[1:15], 10, replace=TRUE)
vector1
[1] "a" "b" "c" "d"
vector2
[1] "d" "f" "i" "n" "d" "n" "o" "j" "j" "a"
vector2 [!(vector2 %in% vector1)] # elements in vector2 that are not in vector1
[1] "f" "i" "n" "n" "o" "j" "j"
【讨论】:
你可以定义一个新的操作符,
`%ni%` = Negate(`%in%`)
【讨论】:
现在可以使用更优雅的解决方案:
library(textclean)
# master character vector
vector1 = c("blue", "green", "red")
# vector containing elements to be removed from master vector
vector2 = c("green", "red")
drop_element_fixed(vector1, vector2)
# Output:
# [1] "blue"
【讨论】: