r - 计算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 合并到我的数据框 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
预期输出数据:
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 都会计算“命中”。
简单来说,它应该回答一个问题:
同一个Merchant ID在同一个月内交易了多少个Unique Card Number?
解决方案
您可以从 date 中提取年月值并计算每个和的唯一CardNum
值。MerchantID
month
library(dplyr)
df %>%
mutate(Date = as.Date(Date),
month = format(Date, "%Y-%m")) %>%
group_by(MerchantID, month) %>%
mutate(HitsPerMonth = n_distinct(CardNum))
如果 a必须为每个月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)))
推荐阅读
- video - 未在 agora 会议中录制视频
- android-studio - IDE 致命错误 - 插件 Gradle 中的异常
- typescript - NestJS,尝试使用 ormconfig.ts,它破坏了一切
- postgresql - 如何为新的 GCP Cloud SQL PostgreSQL 用户授予 SELECT 权限?
- python-3.x - PySide2:QWidget 在装饰器中无法按预期工作
- directory - 织物纹理未加载
- powershell - powershell 导入 csv 并过滤名称以运行 enable-remotemailbox 并更新属性
- vue.js - 如何在 nuxtjs 中用作 vuetify 主题颜色
- javascript - 我的 Javascript 承诺实现有什么问题?
- javascript - 在 TypeScript webpack 项目中使用 JavaScript npm 包