R - 选择行

时间:2015-10-25 13:47:53

标签: r dplyr

我有一个包含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的解决方案,那就更感激了!

谢谢!

1 个答案:

答案 0 :(得分:3)

在您的第一个子集之后,使用group_by按每个ID_CUSTOMER进行过滤。然后使用filterany查找至少有一个值满足条件的组。

<强> 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