2011-03-10 79 views

回答

17

我想我找到了答案。使用复制()函数:

a=c(3,5,7,2,7,9) 
b=1:10 
any(duplicated(a)) #True 
any(duplicated(b)) #False 
+4

对于非常长的向量,'anyDuplicated'会快一点 - 它可以在找到第一个重复时终止。 – hadley 2011-03-10 20:48:23

+0

这甚至更好! – ZNN 2011-03-11 17:01:30

+1

我认为使用anyDuplicated()有点奇怪。它返回一个长度为1的整数,其值为第一个副本的基于1的索引,或0.因此,** any(duplicated(a))**的等效值应为** anyDuplicated(a)== 0 * *。如果anyDuplicated()返回** TRUE **(如果有任何重复),则更直观。 – 2017-07-13 12:10:42

0

检查:

> all(diff(c(1,2,3))) 
[1] TRUE 
Warning message: 
In all(diff(c(1, 2, 3))) : coercing argument of type 'double' to logical 
> all(diff(c(1,2,2,3))) 
[1] FALSE 
Warning message: 
In all(diff(sort(c(1, 2, 4, 2, 3)))) : coercing argument of type 'double' to logical 

您可以添加一些铸造摆脱警告。

1

如果你正在寻找连续重复,你可以使用diff

a <- 1:10 
b <- c(1:5, 5, 7, 8, 9, 10) 
diff(a) 
diff(b) 

还是在矢量的任何地方:

length(a) == length(unique(a)) 
length(b) == length(unique(b)) 
3

也可以尝试rle(x)找到相同的值的游程的长度在x

相关问题