直到当前行的列中的累积唯一值的数量

时间:2011-12-09 19:54:36

标签: r apply

我有一个数据框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)))

不幸的是,这不起作用,我想知道如何补救。感谢您的任何建议。

2 个答案:

答案 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)]))
})

毫无疑问,这不是最有效的解决方案,但它应该有效。