r-每个因素组的筛选日期



我有这个数据集

set.seed(1)
df1<- data.frame(
user = as.factor(rep(c("mike","john","david", "gabriel"), each =4)),
trx_date = sample(seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="day"), 16)
)
df2<- data.frame(
user = as.factor(c("mike","john","david")),
filter_date= as.Date(c("1999-07-29", "1999-03-08", "1999-10-24"))

我如何根据user过滤在df2filter_date之后发生的df1中的任何trx_date

使用包dplyr,您可以执行

library(dplyr)
full_join(df1, df2, by=c('user')) %>%
group_by(user) %>%
filter(trx_date >= filter_date)

但是你想用";gabriel"?它不存在于df2中,那么应该如何过滤呢?有了上述解决方案,它就丢失了。如果要保留它,请将filter替换为filter(trx_date >= filter_date | is.na(filter_date))。(注意使用单个|,而不是通常的||(

您可以连接两个数据帧,然后连接filter:

library(dplyr)
df1 %>%
inner_join(df2, by = 'user') %>%
filter(trx_date > filter_date)

base R中,我们可以将mergesubset一起使用

subset(merge(df1, df2, by = 'user'), trx_date > filter_date)

相关内容

  • 没有找到相关文章

最新更新