[英]Count the number of records per month in R
給定商戶 ID、卡號和日期,我需要計算每個月與每個商戶 ID 關聯的卡號數量。 到目前為止,我只能計算每個商戶 ID 的卡號數量,但我無法使用以下代碼每月計算它:
HitsCounter <- summarise(group_by(df, MerchantID), HitsTotal = n_distinct(CardNum))
可重現的數據:
MerchantID <- c('1234, '1234', '1234', '1234')
CardNum <- c('1abc1', '1abc1', '2xyz2', '3ijk3')
Date <- c('2020-05-07', '2020-05-07', '2019-10-12', '2019-10-25')
df <- data.frame(MerchantID, CardNum, Date)
當我將 HitsCounter 合並到我的 dataframe df 時得到什么:
MerchantID CardNum Date HitsTotal
1234 1abc1 2020-05-07 3
1234 1abc1 2020-05-07 3
1234 2xyz2 2019-10-12 3
1234 3ijk3 2019-10-25 3
預期 Output 數據:
MerchantID CardNum Date HitsPerMonth
1234 1abc1 2020-05-07 2
1234 1abc1 2020-02-07 1
1234 2xyz2 2020-05-12 2
1234 3ijk3 2019-10-25 1
1234 3ijk3 2019-10-01 1
請注意,即使在不同月份,邏輯也應完全忽略任何重復的 CardNumber,因為每個唯一 CardNumber 都會計算“命中”。
簡單地說,它應該回答這個問題:
同一個商戶號在同一個月內交易了多少個唯一卡號?
您可以從 date 中提取年月值並計算每個MerchantID
和month
的唯一CardNum
值。
library(dplyr)
df %>%
mutate(Date = as.Date(Date),
month = format(Date, "%Y-%m")) %>%
group_by(MerchantID, month) %>%
mutate(HitsPerMonth = n_distinct(CardNum))
如果一個CardNum
必須為每個MerchantID
計算一次,而不管月份如何,那么您可以執行以下操作:
df %>%
mutate(Date = as.Date(Date),
month = format(Date, "%Y-%m")) %>%
group_by(MerchantID) %>%
mutate(CardNum = replace(CardNum, duplicated(CardNum), NA)) %>%
group_by(month, .add =TRUE) %>%
mutate(HitsPerMonth = n_distinct(na.omit(CardNum)))
您可以使用ave
並計算唯一長度。
df <- transform(df, hits.pm=ave(CardNum, MerchantID, substr(Date, 6, 7),
FUN=function(x) length(unique(x))))
df
# MerchantID CardNum Date hits.pm
# 1 1234 1abc1 2020-05-07 1
# 2 1234 1abc1 2020-05-07 1
# 3 1234 2xyz2 2019-10-12 2
# 4 1234 3ijk3 2019-10-25 2
# 5 1235 1abc1 2020-05-07 1
# 6 1236 1abc1 2020-05-07 1
# 7 1235 2xyz2 2019-10-12 2
# 8 1235 3ijk3 2019-10-25 2
數據:
df <- read.table(header=T, text=" MerchantID CardNum Date
1 1234 1abc1 2020-05-07
2 1234 1abc1 2020-05-07
3 1234 2xyz2 2019-10-12
4 1234 3ijk3 2019-10-25
5 1235 43bc1 2020-05-07
6 1235 foo12 2020-05-07
7 1236 foo34 2019-10-12
8 1236 foo34 2019-10-25
")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.