[英]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.