R cumunique喜欢cumsum

时间:2016-02-26 06:43:30

标签: r cumsum

我想要一个与cumsum等效的函数,但不是加起来它计算到目前为止唯一值的数量。我可以为每个潜在的集合编写一个循环,但由于我的数据集有数百万的观察结果,这似乎会花费很多时间。

示例:

a <- c(1,3,2,4,1,5,2,3)
f(a)
[1] 1 2 3 4 4 5 5 5

2 个答案:

答案 0 :(得分:10)

您可以尝试:

cumsum(!duplicated(a))
#[1] 1 2 3 4 4 5 5 5

答案 1 :(得分:2)

我们可以尝试

library(zoo)
a[duplicated(a)] <- NA
a[!is.na(a)] <- seq_along(a[!is.na(a)])
na.locf(a)
#[1] 1 2 3 4 4 5 5 5

或另一种选择是

cumsum(ave(a, a, FUN=seq_along)==1)
#[1] 1 2 3 4 4 5 5 5

或者紧凑的选项是

library(splitstackshape)
getanID(a)[, cumsum(.id==1)]
#[1] 1 2 3 4 4 5 5 5