查找第n个重复项

问题描述 投票:0回答:2

所以我有一个看起来像这样的向量:

x <- c(1,1,1,3,4,5,6,7,7,7,7)

我知道重复函数,但是我希望R在第n个重复项之后返回一个布尔向量。假设我有兴趣知道重复的第三个数字(或更多个数字),这样返回的就是:

FALSE  FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  FALSE TRUE  TRUE
r duplicates
2个回答
2
投票

一种可能是:

ave(duplicated(x), x, FUN = function(x) cumsum(x) >= 2)

 [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE

如果可以重复元素的运行:

x <- c(1,1,1,3,4,5,6,7,7,7,7,1,1,1)

rleid <- with(rle(x), rep(seq_along(values), lengths))
ave(duplicated(rleid), rleid, FUN = function(x) cumsum(x) >= 2)

 [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE
[13] FALSE  TRUE

1
投票

我们可以使用ave

n <- 3
ave(x, x, FUN = seq_along) >= n
# [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE

翻译为dplyr

library(dplyr)

data.frame(x) %>%
   group_by(x) %>%
   mutate(dup = row_number() >= n)
© www.soinside.com 2019 - 2024. All rights reserved.