首页 > 解决方案 > 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 是唯一的,交易也不会在指定日期之后发生,因此不应将其删除。

标签: r

解决方案


你可以试试这个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'


推荐阅读