【问题标题】:Cumulative number of unique values in a column up to current row直到当前行的列中唯一值的累积数量
【发布时间】:2011-12-09 19:54:35
【问题描述】:

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

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

【问题讨论】:

    标签: r apply


    【解决方案1】:

    您可以使用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
    

    【讨论】:

      【解决方案2】:

      试试这样的:

      donorInfo$numUnique<-sapply(seq(nrow(donorInfo)), function(rn){
        length(unique(donorInfo$id[seq(rn)]))
      })
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-19
        • 1970-01-01
        • 2014-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-05
        • 2020-09-01
        相关资源
        最近更新 更多