R:从另一个向量中删除一个向量中值的出现次数,但不是全部

时间:2016-05-25 15:16:55

标签: r vector

道歉令人困惑的标题,但我不知道如何表达我的问题。在R中,我有以下问题需要解决:

i
> 1 1 1 1 1 1 1 0 0 0 0 0 0 0

如何从向量z中移除向量p,以便向量一个新向量i现在有三次出现1次,三次出现0 less ,所以我需要做什么才能达到以下结果?在解决方案中,z中1和0的顺序无关紧要,它们可能只是随机顺序,而且还可能涉及其他数字。

$minPrice = min(array_column($pricearray, 'price'));
$i = array_filter($pricearray, 
        function($i) use ($minPrice) { return $minPrice === $i['price']; });

提前致谢!

2 个答案:

答案 0 :(得分:1)

类似于@ VincentGuillemot的答案,但是在函数式编程风格中。使用purrr包:

i <- z
map(p, function(x) { i <<- i[-min(which(i == x))]})
i

> i
 [1] 1 1 1 1 1 1 1 0 0 0 0 0 0 0

答案 1 :(得分:0)

可能有很多更好的方法:

i <- z
for (val in p) {
  if (val %in% i) {
    i <- i[ - which(i==val)[1] ]
  }
}

我更喜欢的另一种解决方案,因为它不需要测试(并且感谢弗兰克的建议):

for (val in p) 
  i <- i[ - match(val, i, nomatch = integer(0) ) ]