R 减去集合,以便在结果中保留其他类似的多个元素

R 减去集合,以便在结果中保留其他类似的多个元素,r,R,例如,我在set1中有两张椅子和一张桌子,在set2中有一张椅子。 我想从set1中减去set2,结果是c(“椅子”、“桌子”) set1set1另一种方法是使用make.unique使名称唯一,然后使用%中的%创建逻辑向量并索引原始向量,即 set1[!make.unique(set1) %in% make.unique(set2)] #[1] "chair" "table" 或者让它成为一种功能 f1 <- function(vec1, vec2){ vec1[!make.u

例如,我在set1中有两张椅子和一张桌子,在set2中有一张椅子。 我想从set1中减去set2,结果是
c(“椅子”、“桌子”)


set1
set1另一种方法是使用
make.unique
使名称唯一,然后使用%
中的
%创建逻辑向量并索引原始向量,即

set1[!make.unique(set1) %in% make.unique(set2)]
#[1] "chair" "table"
或者让它成为一种功能

f1 <- function(vec1, vec2){
    vec1[!make.unique(vec1) %in% make.unique(vec2)]
}

f1(set1, set2)

f1包
vecsets
将对向量执行设置操作,同时保留重复项:

vecsets::vsetdiff( c("chair", "chair", "table"), c("chair") )
# [1] "chair" "table"

unique(c(set1,set2))
也许。@David如果在
set1
中有三把椅子,那就不行了@Arenburg,unique(c(set1,set2))的问题是如果我在set1中有三把椅子,我就得不到想要的结果(“椅子”、“椅子”、“桌子”)。我们能做一个函数,把set1和set2作为参数并给出结果吗
f1 <- function(vec1, vec2){
    vec1[!make.unique(vec1) %in% make.unique(vec2)]
}

f1(set1, set2)
vecsets::vsetdiff( c("chair", "chair", "table"), c("chair") )
# [1] "chair" "table"