如何从r中的列表或向量中删除单个非唯一元素

时间:2013-12-03 10:37:30

标签: r vector unique

我正在寻找的是一种删除单个非唯一元素的有效方法。

说我有矢量:

c(1,1,1,2,2,3,3,4)

我想删除:

c(1,2)

这样结果就是

c(1,1,2,3,3,4)

我确定它很简单,但我不知所措。发出声音!

1 个答案:

答案 0 :(得分:4)

您正在寻找的功能是match。这是代码

a <- c(1,1,1,2,2,3,3,4)
b <- c(1,2)

a[-match(b, a)]
### [1] 1 1 2 3 3 4

这是有效的,因为match 会返回第二个参数中(第一个)匹配位置的向量。

编辑:正如@Ananda Mahto指出的那样,只有b中的所有元素都在a中时才有效。对于更通用的公式,请使用以下函数

element_rm <- function(a, b){
  if (any(b%in%a)) return(a[-match(b[b%in%a], a)])
  else return(a)
}
a <- c(1,1,1,2,2,3,3,4)
element_rm(a, c(1,2))
##  [1] 1 1 2 3 3 4
element_rm(a, c(2,5))
## [1] 1 1 1 2 3 3 4
element_rm(a, 5)
## [1] 1 1 1 2 2 3 3 4
element_rm(a, c(4,4))
## [1] 1 1 1 2 2 3 3