繁体   English   中英

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

[英]matching observation dates per user ID and giving a matching score R

我有一个数据如下所示的数据框“ ds”,我正在尝试按用户为用户计算“日期”列中的匹配项

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))))

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

您可以尝试使用data.table (以下内容将完全填写Match_num列,而不是仅添加几个值)

library(data.table)
DS <- data.table(ds)
DS[, Match_num := .N, by=list(user_id, date)]

如果OP想要重复的数量

library(data.table)
setDT(ds)[, Match_num:= uniqueN(date[duplicated(date)]) , .(user_id)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM