所以我有一个看起来像这样的向量:
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
一种可能是:
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
我们可以使用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)