3
我想要一個相當於cumsum的函數,而不是加起來它計數到目前爲止的唯一值的數量。我可以爲每個潛在集合編寫一個循環,但似乎可能會耗費時間,因爲我的數據集有數百萬條觀察值。R cumunique像cumsum
例子:
a <- c(1,3,2,4,1,5,2,3)
f(a)
[1] 1 2 3 4 4 5 5 5
我想要一個相當於cumsum的函數,而不是加起來它計數到目前爲止的唯一值的數量。我可以爲每個潛在集合編寫一個循環,但似乎可能會耗費時間,因爲我的數據集有數百萬條觀察值。R cumunique像cumsum
例子:
a <- c(1,3,2,4,1,5,2,3)
f(a)
[1] 1 2 3 4 4 5 5 5
你可以試試:
cumsum(!duplicated(a))
#[1] 1 2 3 4 4 5 5 5
我們可以嘗試
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