根据时间的cumsum独特项目

时间:2016-09-14 13:46:28

标签: r cumsum

我希望根据时间积累唯一的用户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

但是,我遵循这个主题的第一个答案,但它不能解决我的问题

1 个答案:

答案 0 :(得分: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的累计数量,然后计算每次的最大数量。