匹配每个用户ID的观察日期并给出匹配的分数R.

时间:2016-03-04 19:05:33

标签: r statistics

我有一个数据框" 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))) )

但它不能用于匹配日期,我需要计算确切的匹配数而不是百分比。

2 个答案:

答案 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)]