【问题标题】:cumsum unique item according to timecumsum 根据时间的独特项目
【发布时间】:2017-01-22 08:39:28
【问题描述】:

我想根据时间累计唯一的用户ID,这是数据

     userid       time
   1          2014-10-01
   1          2014-11-16
   2          2014-11-14
   1          2014-10-16
   2          2014-11-16
   3          2014-10-16

2014-10-16 的唯一 id 数量为 2,2014-11-14 的唯一 ID 数量为 3。

我想返回一个这样的矩阵

     userid       time        count
   1              2014-10-01         1
   1              2014-11-16         3
   2              2014-11-14         3
   1              2014-10-16         2
   2              2014-11-16         3
   3              2014-10-16         2

我想我应该使用 cumsum 来做到这一点。实际上,我发现这个线程正在做类似的事情Cumulative count of unique values in R

但是,我遵循此线程的第一个答案,但它不适用于我的情况

【问题讨论】:

  • 您的输入和预期的“时间”不正确。我猜df1[, count := uniqueN(userid), time] 可能是你想要的
  • 假设您的数据按time 排序,您可能正在寻找dt[, count := cumsum(!duplicated(userid))][, count := max(count), by = time]
  • 已编辑“时间”输入。
  • @akrun Yours 正在计算每天的唯一身份用户总数,而不是到那个日期
  • @Lucia 好的,之前预期输出的时间列有问题,现在好像已经修复了

标签: r cumsum


【解决方案1】:

由于您似乎正在使用data.table(从您的第一个版本帖子的外观来看),这是使用该包的一种方法:

library(data.table)
setDT(dt) # just in case it's still a data.frame
dt[order(time), count := cumsum(!duplicated(userid))][,   
                count := max(count), by = time]
dt
#   userid       time count
#1:      1 2014-10-01     1
#2:      1 2014-11-16     3
#3:      2 2014-11-14     3
#4:      1 2014-10-16     2
#5:      2 2014-11-16     3
#6:      3 2014-10-16     2

按照time对数据排序后,我们计算唯一userid的累积计数,然后得到每次的最大计数。

【讨论】:

    猜你喜欢
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多