我有一个数据框" ds"数据如下所示 我试图计算列#34;日期"用户用户
user_id observation date
1 efd 2005-01-11
1 vev4 2005-01-10
1 23e 2005-01-10
1 rvw 2005-01-11
2 3dfv 2005-01-08
2 cfv 2005-01-08
2 dfv 2005-01-11
2 rvw 2005-02-11
2 rvw 2005-02-17
2 rvw 2005-02-21
3 rvw 2005-02-24
3 rvw 2005-03-09
3 efd 2005-03-25
4 23e 2005-03-12
4 23e 2005-03-12
5 23e 2005-03-15
6 efd 2005-03-16
6 23e 2005-03-16
6 23e 2005-03-18
7 3dfv 2005-03-24
7 rvw 2005-03-24
7 3dfv 2005-03-22
7 3dfv 2005-03-23
所以期望的结果会像:
user_id observation date Match_num
1 efd 2005-01-11 2
1 vev4 2005-01-10
1 23e 2005-01-10
1 rvw 2005-01-11
2 3dfv 2005-01-08 2
2 cfv 2005-01-08
2 dfv 2005-01-11
2 rvw 2005-02-11
2 rvw 2005-02-17
2 rvw 2005-02-21
3 rvw 2005-02-24 0
3 rvw 2005-03-09
3 efd 2005-03-25
4 23e 2005-03-12 1
4 23e 2005-03-12
5 23e 2005-03-15 0
6 efd 2005-03-16 1
6 23e 2005-03-16
6 23e 2005-03-18
7 3dfv 2005-03-24 1
7 rvw 2005-03-24
7 3dfv 2005-03-22
7 3dfv 2005-03-23
我知道如何处理" ave"计算百分比:
ds $ match_num< - with(ds,ave(date,customer_id,FUN = function(x)c(sum(x)/ length(x),rep(NA,length(x)-1))) )
但它不能用于匹配日期,我需要计算确切的匹配数而不是百分比。
答案 0 :(得分:2)
您可以尝试使用print(mp.stdin)
<_io.FileIO name=71 mode='wb'>
(以下内容将完全填写Match_num列,而不是仅添加几个值)
data.table
答案 1 :(得分:2)
如果OP想要重复数量
library(data.table)
setDT(ds)[, Match_num:= uniqueN(date[duplicated(date)]) , .(user_id)]