我有一个数据框donorInfo
,其中包含捐赠者信息:
id giftdate giftamt
002 2001-01-05 25.00
033 2001-05-08 50.00
054 2001-09-22 125.00
125 2001-11-05 40.00
042 2001-12-04 75.00
... ... ...
我想创建一个列,显示截至该日期的唯一捐赠者ID的累计数量。我认为它是这样的:
donorInfo$numUnique <- apply/lapply (donorInfo, 1, FUN=nrow(unique(donorInfo$id)))
不幸的是,这不起作用,我想知道如何补救。感谢您的任何建议。
答案 0 :(得分:8)
您可以使用duplicated()
和cumsum()
执行此操作(利用布尔值逻辑向量可以强制转换为数字向量的事实):
# Example data.frame with some duplicated ids
df <- read.table(text="
id giftdate giftamt
2 2001-01-05 25
33 2001-05-08 50
2 2001-09-22 125
33 2001-11-05 40
42 2001-12-04 75", header=T)
cumsum(!duplicated(df$id))
# [1] 1 2 2 2 3
答案 1 :(得分:2)
尝试这样的事情:
donorInfo$numUnique<-sapply(seq(nrow(donorInfo)), function(rn){
length(unique(donorInfo$id[seq(rn)]))
})
毫无疑问,这不是最有效的解决方案,但它应该有效。