【问题标题】:R cumunique like cumsum [duplicate]R cumunique 像 cumsum [重复]
【发布时间】:2016-02-26 06:43:29
【问题描述】:

我想要一个与 cumsum 等效的函数,但不是将它相加,而是计算迄今为止唯一值的数量。我可以为每个潜在集合编写一个循环,但这似乎会很耗时,因为我的数据集有数百万个观察值。

例子:

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

【问题讨论】:

    标签: r cumsum


    【解决方案1】:

    你可以试试:

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

    【讨论】:

      【解决方案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
      

      【讨论】:

        猜你喜欢
        • 2020-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多