我有一个包含3列的数据框:ID_CUST,ID_TRANSACTION,TRANSACTION_MONTH。
让我们想象以下数据框:
ID_CUSTOMER ID_TRANSACTION TRANSACTION_MONTH
2 43 2
2 94 5
2 99 8
3 102 4
5 121 12
我首先只选择一段时间的交易:
df_subset< - DM_TRAFFIC%>%过滤器(MONTH> = 2& MONTH< = 5)
ID_CUSTOMER ID_TRANSACTION TRANSACTION_MONTH
2 43 2
2 94 5
3 102 4
从那些交易中,我希望保留在第5个月进行交易的客户的所有交易。
ID_CUSTOMER ID_TRANSACTION TRANSACTION_MONTH
2 43 2
2 94 5
我对如何解决这一步感到困惑。
如果你有dplyr或datatable的解决方案,那就更感激了!
谢谢!
答案 0 :(得分:3)
在您的第一个子集之后,使用group_by
按每个ID_CUSTOMER
进行过滤。然后使用filter
和any
查找至少有一个值满足条件的组。
<强> dplyr 强>
DM_TRAFFIC %>%
filter(TRANSACTION_MONTH >=2 & TRANSACTION_MONTH <=5) %>%
group_by(ID_CUSTOMER) %>%
filter(any(TRANSACTION_MONTH == 5))
#Source: local data frame [2 x 3]
#Groups: ID_CUSTOMER [1]
#
# ID_CUSTOMER ID_TRANSACTION TRANSACTION_MONTH
# (int) (int) (int)
#1 2 43 2
#2 2 94 5
<强> data.table 强>
setDT(DM_TRAFFIC)[TRANSACTION_MONTH >= 2 & TRANSACTION_MONTH <= 5][
, if(any(TRANSACTION_MONTH == 5)) .SD,by = ID_CUSTOMER]
# ID_CUSTOMER ID_TRANSACTION TRANSACTION_MONTH
#1: 2 43 2
#2: 2 94 5