R: Identifies all entries with replicated values

isReplicated {R.utils} | R Documentation

## Identifies all entries with replicated values

### Description

Identifies all entries with replicated values, that is, with values that exist more than once.

### Usage

     isReplicated(x, ...)
     replicates(x, ...)

### Arguments

`x` | A `vector` of length K.
`...` | Additional arguments passed to `duplicated`().

### Details

Let `reps <- isReplicated(x)`. Then it always holds that:

- `reps == rev(isReplicated(rev(x)))`

- `reps == duplicated(x) | duplicated(x, fromLast=TRUE)`

- `reps == !is.element(x, setdiff(x, unique(x[duplicated(x)])))`

### Value

A `logical` `vector` of length K, where `TRUE` indicates that the value exists elsewhere, otherwise not.

### Author(s)

Henrik Bengtsson

### See Also

Internally `duplicated`() is used. See also `isSingle`().

### Examples

    x <- c(1,1,2,3,4,2,1)
    x <- base::letters[x]
    print(x)

    # Identify entries with replicated values
    reps <- isReplicated(x)
    print(x[reps])
    stopifnot(x[reps] == replicates(x))

    # Identify entries with unique values
    print(x[!reps])
    stopifnot(x[!reps] == singles(x))

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    # Validation
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    x <- c(1,1,2,3,4,2,1)
    x <- base::letters[x]
    reps <- isReplicated(x)

    stopifnot(all(table(x[reps]) > 1))
    stopifnot(all(table(x[!reps]) == 1))
    stopifnot(all(reps == rev(isReplicated(rev(x)))))
    stopifnot(all(reps == duplicated(x) | duplicated(x, fromLast=TRUE)))
    stopifnot(all(reps == !is.element(x, setdiff(x, unique(x[duplicated(x)])))))
    stopifnot(all(sort(c(singles(x), replicates(x))) == sort(x)))

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    # Benchmarking singles()
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    set.seed(0xBEEF)
    n <- 1e6
    x <- sample(1:(n/2), size=n, replace=TRUE)
    t <- system.time({
      s <- isSingle(x)
    })
    print(sum(s))

    t0 <- system.time({
      s0 <- !(x %in% x[duplicated(x)]);
    })
    print(t/t0)
    stopifnot(all(s == s0))

[Package R.utils version 2.7.0 Index]