r - R:如何在多个条件下过滤数据集
问题描述
我有一个由三个变量组成的数据集:“customer_ID”、“date”、“Purchase_amount”。
我需要对数据集应用过滤器,如果它们发生在指定日期之后,则删除唯一的 customer_ID。
我在想类似的东西:filter(df, !unique(customer_ID) & date>=2019-12-31)
或者也许一个If()
函数更适合这里。
我该怎么办?
- - 编辑 - -
背景是我正在尝试进行 CLV 分析,这需要我将数据集拆分为估计期和保持期。上述数据集中的每个观察值都代表客户在给定日期以给定金额进行的交易。同一客户可以多次购买,这只会导致客户 ID 显示多次。为了进行分析,我需要从保留期中删除所有新获取的客户,因为我只对起始客户组感兴趣,看看估计期有多少客户决定再次购买在搁置期内。
为了说明这个问题,我创建了一些模型数据:
ID=c(1,2,3,1,3,4)
date=c('2020-01-01','2020-01-05','2020-01-19','2020-02-03','2020-02-14','2020-02-21')
purchase_amount=c(24,20,19,30,22,24)
data.frame(ID,date,purchase_amount)
我想创建一个过滤器,删除包含 2020 年 1 月 31 日之后发生的唯一 customer_ID 的每个观察。在此示例中,这意味着将删除 customer_ID 为 4 的客户。请记住,即使 customer_ID 2 是唯一的,交易也不会在指定日期之后发生,因此不应将其删除。
解决方案
你可以试试这个dplyr
:
library(dplyr)
df %>%
mutate(date = as.Date(date)) %>%
group_by(ID) %>%
filter(!all(date > as.Date('2020-01-31'))) %>%
ungroup -> result
result
# ID date purchase_amount
# <dbl> <date> <dbl>
#1 1 2020-01-01 24
#2 2 2020-01-05 20
#3 3 2020-01-19 19
#4 1 2020-02-03 30
#5 3 2020-02-14 22
这将删除条目之后的ID
's 。all
'2020-01-31'
推荐阅读
- python - 无法合并输出中的列表
- actionscript-3 - CompressedInt 写入?
- android - ArthurHub 图像裁剪器在 Fragment 中无法正常工作,要求手动定义 RESULT_OKAY
- python - 将 lxml.etree._ElementTree 对象存储在数据框中:TypeError: can't pickle lxml.etree._ElementTree objects
- python - 为什么我的神经网络在几个 epoch 之后权重极低?
- python - 使用 Selenium Python 获取工具提示文本
- ios - 如何让侧边菜单与手指一起滑动?
- angular - Angular 8 反应式表单验证
- mysql - 无法从 NodeJS 连接到 MySQL
- asp.net-core-mvc - 如何从控制器获取 HttpContext