R:删除向量中的重复元素

时间:2016-05-23 00:47:46

标签: r vector filter

我有这样的矢量:

x = c(1,2,3,4,5,6,4,5,6,7)

> x
 [1] 1 2 3 4 5 6 4 5 6 7

我想摆脱重复并得到这样的东西:

> [1] 1 2 3 7 

我的尝试

y = x[duplicated(x)]

> y
[1] 4 5 6

> x[x!=y]
[1] 1 2 3 7
Warning message:
In x != y : longer object length is not a multiple of shorter object length
> 

我做错了什么?

这个错误是我应该担心的吗?

有没有其他方法可以做到这一点而不会出现错误?

4 个答案:

答案 0 :(得分:4)

小心在测试中使用连续数字!

x <- c(1,2,3,4,5,6,4,5,6,7)
x1 <- c(-1, -1, 2, 8, 8, 15)

keep_singles <- function(v){
  v[!(v %in% v[duplicated(v)])] 
}

keep_singles(x)

[1] 1 2 3 7

keep_singles(x1)

[1]  2 15

答案 1 :(得分:3)

使用基本R做一个简单的方法,它不会给你一个警告信息。

编辑:来自@ Hugh建议的更灵活的回答

y = as.numeric(names(which(table(x)==1)))

y
[1] 1 2 3 7

答案 2 :(得分:2)

这是一种仅duplicated

的方法
x[!(duplicated(x)|duplicated(x, fromLast=TRUE))]
#[1] 1 2 3 7

答案 3 :(得分:0)

简单的代码方式,但使用[!x%in%y]而不是[x!=y]

x = c(1,2,3,4,5,6,4,5,6,7)

y <- x[duplicated(x)]

z <- x[!x%in%y]

print(z)
[1] 1 2 3 7