我正在处理具有重复值的数据,我希望得到重复值的时间。
例如,如果我有:
test_list <- c(0,1,2,2,2,3,4,5,5,6,7,7,7,7)
我应用了重复的功能dups <- duplicated(test_list)
,我们有dups
:
[1] FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE
[9] TRUE FALSE FALSE TRUE TRUE TRUE
对于这个dups
,我想用索引标记TRUE
序列,以表示该值复制的时间。例如,我想最终:
[1] 0 0 0 1 2 0 0 0 1 0 0 1 2 3
你们可以给我一些关于如何做到这一点的提示吗?谢谢!
答案 0 :(得分:1)
我们可以通过ave
进行操作来获取序列,然后从中减去1
ave(test_list, test_list, FUN = seq_along)-1
#[1] 0 0 0 1 2 0 0 0 1 0 0 1 2 3
答案 1 :(得分:0)
不知何故,我认为必须有更好的方法来使用cumsum()
或类似的东西来做到这一点。但这适用于你的例子。
test_list <- c(0,1,2,2,2,3,4,5,5,6,7,7,7,7)
dups <- duplicated(test_list)
adding.it <- 0
dup.func <- function(x){
if(x == FALSE){
adding.it <<- 0
return(0)
}else{
adding.it <<- adding.it + 1
return(adding.it)
}
}
result <- sapply(dups, dup.func)
result
#[1] 0 0 0 1 2 0 0 0 1 0 0 1 2 3