48

我有一个包含重复元素的向量,并且想删除它们,以便每个元素只出现一次。

在 Python 中,我可以Set从向量构造 a 来实现这一点,但是如何在 R 中做到这一点?

4

3 回答 3

78

您可以签出unique功能。

 > v = c(1, 1, 5, 5, 2, 2, 6, 6, 1, 3)
 > unique(v)
 [1] 1 5 2 6 3
于 2012-05-26T20:54:19.353 回答
11

This does the same thing. Slower, but useful if you also want a logical vector of the duplicates:

v[duplicated(v)]
于 2013-08-22T01:55:12.410 回答
7

要仅删除连续的重复元素,您可以将向量与自身的移位版本进行比较:

v <- c(1, 1, 5, 5, 5, 5, 2, 2, 6, 6, 1, 3, 3)
v[c(TRUE, !v[-length(v)] == v[-1])]
[1] 1 5 2 6 1 3

使用dplyr可以更优雅地编写相同的内容:

library(dplyr)
v[v != lag(v)]
[1] NA  5  2  6  1  3

lag()返回的 NA删除第一个值,要保留第一个值,您可以将默认值更改为与第一个值不同的值。

v[v != lag(v, default = !v[1])]
[1] 1 5 2 6 1 3
于 2018-08-23T09:42:38.783 回答