当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R duplicated 确定重复元素


R语言 duplicated 位于 base 包(package)。

说明

duplicated() 确定向量或数据帧的哪些元素是具有较小下标的元素的重复项,并返回一个逻辑向量,指示哪些元素(行)是重复项。

anyDuplicated(.) 是 “generalized” 更高效的版本 any(duplicated(.)) ,返回正整数索引而不仅仅是 TRUE

用法

duplicated(x, incomparables = FALSE, ...)

## Default S3 method:
duplicated(x, incomparables = FALSE,
           fromLast = FALSE, nmax = NA, ...)

## S3 method for class 'array'
duplicated(x, incomparables = FALSE, MARGIN = 1,
           fromLast = FALSE, ...)

anyDuplicated(x, incomparables = FALSE, ...)
## Default S3 method:
anyDuplicated(x, incomparables = FALSE,
           fromLast = FALSE, ...)
## S3 method for class 'array'
anyDuplicated(x, incomparables = FALSE,
           MARGIN = 1, fromLast = FALSE, ...)

参数

x

向量或 DataFrame 或数组或 NULL

incomparables

无法比较的值向量。 FALSE 是一个特殊值,意味着所有值都可以进行比较,并且可能是默认值以外的方法接受的唯一值。它将在内部强制转换为与 x 相同的类型。

fromLast

逻辑指示是否应从反面考虑重复,即最后一个(或最右边)的相同元素将对应于 duplicated = FALSE

nmax

预期的唯一项目的最大数量(大于 1)。

...

特定方法的参数。

MARGIN

数组边距保持固定:请参阅 apply ,并注意 MARGIN = 0 可能有用。

细节

这些是通用函数,具有向量(包括列表)、数据帧和数组(包括矩阵)的方法。

对于默认方法,只要 duplicatedanyDuplicated 存在等效方法定义,anyDuplicated(x, ...) 就是 any(duplicated(x, ...)) 的 “generalized” 快捷方式,因为它返回第一个重复项的索引 i如果有条目x[i],否则0。当 duplicatedanyDuplicated 至少之一具有相关方法时,它们的行为可能会有所不同。

duplicated(x, fromLast = TRUE) 相当于但比 rev(duplicated(rev(x))) 更快。

如果剩余维度与较早(或较晚,当 fromLast = TRUE 时)元素的维度相同(按行优先顺序),则数组方法计算 MARGIN 指定的 sub-array 的每个元素。这最常用于查找重复的行(默认)或列(使用 MARGIN = 2 )。请注意, MARGIN = 0 返回与 x 具有相同维度属性的数组。

缺失值 ( "NA" ) 被视为等于、数字和复数,与 NaN 不同;字符串将在“common encoding”中进行比较;有关详细信息,请参阅使用相同概念的match(和unique)。

incomparables 中的值永远不会被标记为重复。这旨在用于相当小的值集,但对于非常大的值集则效率不高。

除了因子、逻辑向量和原始向量之外,默认 nmax = NA 相当于 nmax = length(x) 。由于分配了8*nmax字节大小的哈希表,适当设置nmax可以节省大量内存。对于因子,它会自动设置为 length(x) 和级别数加一(对于 NA )中较小的一个。如果nmax设置得太小,可能会出现错误:nmax = 1被默默忽略。

duplicated 的默认方法支持 Long vectors,但仅在提供 nmax 时才可用。

duplicated() :对于向量输入,与 x 长度相同的逻辑向量。对于 DataFrame ,是一个逻辑向量,每行一个元素。对于矩阵或数组,当 MARGIN = 0 时,是具有相同维度和暗名称的逻辑数组。

anyDuplicated() :长度为 1 的整数或实数向量,其值为第一个重复项的从 1 开始的索引(如果有),否则为 0

警告

将其用于列表可能会很慢,特别是如果元素不是原子向量(请参阅vector)或仅在属性上有所不同。最坏的情况是

例子

x <- c(9:20, 1:5, 3:7, 0:8)
## extract unique elements
(xu <- x[!duplicated(x)])
## similar, same elements but different order:
(xu2 <- x[!duplicated(x, fromLast = TRUE)])

## xu == unique(x) but unique(x) is more efficient
stopifnot(identical(xu,  unique(x)),
          identical(xu2, unique(x, fromLast = TRUE)))

duplicated(iris)[140:143]

duplicated(iris3, MARGIN = c(1, 3))
anyDuplicated(iris) ## 143

anyDuplicated(x)
anyDuplicated(x, fromLast = TRUE)

参考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

也可以看看

unique

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Determine Duplicate Elements。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。