如何减去两个向量'元素一个接一个?

时间:2014-11-09 19:49:53

标签: r vector

我有这两个载体:

first<-c(1,2,2,2,3,3,4)
second<-c(1,2)

现在我希望first没有second元素来获得如下结果:(2,2,3,3,4);确实, 我不希望删除所有2,只想逐个减去。

我试过这个(来自here):

'%nin%' <- Negate('%in%')
first<-first[first %nin% second]

但它会移除2中的所有first并提供此结果:(3,3,4)

我该怎么做?

2 个答案:

答案 0 :(得分:2)

试试这个:

first[-sapply(second, function(x) head(which(is.element(el=first, x)), 1))]
## [1] 2 2 3 3 4

如果您在second中有重复的元素,那么这不会起作用。在这种情况下,我认为你需要一个循环:

first2 <- first
for(i in seq_along(second)) {
    first2 <- first2[-head(which(is.element(el=first2, second[i])), 1)]
}
first2
# [1] 2 2 3 3 4

first2 <- first
second <- c(1,2,2)
for(i in seq_along(second)) {
    first2 <- first2[-head(which(is.element(el=first2, second[i])), 1)]
}
first2
## [1] 2 3 3 4

答案 1 :(得分:1)

怎么样

second<-c(1, 2)
first[-match(second, first)]
## [1] 2 2 3 3 4

对于更复杂的案例,这里有一个使用<<-

的选项
second <- c(1, 2, 2)
invisible(lapply(second, function(x) first <<- first[-match(x, first)]))
first
## [1] 2 3 3 4