我有这个数据集
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
过滤在df2
中filter_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
中,我们可以将merge
与subset
一起使用
subset(merge(df1, df2, by = 'user'), trx_date > filter_date)