【问题标题】:filtering date per factor group每个因子组的过滤日期
【发布时间】:2021-03-18 15:41:42
【问题描述】:

我有这个数据集

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 过滤df1 中的filter_date 中的df2 中的任何trx_date

【问题讨论】:

    标签: r date filter dplyr


    【解决方案1】:

    使用包dplyr,你可以做到

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

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

    【讨论】:

    • 我也想过滤掉。所以我的结果 df 将没有“gabriel”。感谢您的帮助。
    【解决方案2】:

    你可以加入两个数据框,然后filter

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

    【讨论】:

    • 感谢先生的帮助
    【解决方案3】:

    base R中,我们可以使用mergesubset

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多