cumsum 独特的项目根据时间
cumsum unique item according to time
我想根据时间累计unique userid,这里是数据
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 的 unique id 数是 2,到 2014-11-14 的 unique id 数是 3。
我想要return这样的矩阵
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
但是,我遵循了该线程的第一个答案,但它对我的情况不起作用
因为您似乎正在使用 data.table
(从 post 的第一个版本来看),这里有一个使用该包的方法:
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
的累计次数,然后得到每次的最大次数。
我想根据时间累计unique userid,这里是数据
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 的 unique id 数是 2,到 2014-11-14 的 unique id 数是 3。
我想要return这样的矩阵
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
但是,我遵循了该线程的第一个答案,但它对我的情况不起作用
因为您似乎正在使用 data.table
(从 post 的第一个版本来看),这里有一个使用该包的方法:
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
的累计次数,然后得到每次的最大次数。