【问题标题】:Filter data.table on condition per group按每组条件过滤 data.table
【发布时间】:2019-11-01 09:28:06
【问题描述】:

我需要增量更新 SQL 数据库,因此接收以下 data.table 作为输入。

library(data.table)
dt1 <- data.table(Category = letters[1:4]
                  , Max.Date = rep(as.Date("2018-01-01"),4))

我现在想过滤 R 中的 data.table 以选择所有类别,这些类别在我的 data.table dt2 中有较晚的日期,但当然过滤应该在单个类别的级别上完成,以便日期仅按类别进行比较,而不是针对整个 data.table 进行比较

dt2 <- data.table(Category = letters[1:8]
                  , Max.Date = rep(as.Date("2019-01-01"),8))

所需输出应从dt2 中选择,其中 Max.Date 大于dt1,因此所需输出应为:

   dt.desired 
   Category   Max.Date
1:        a 2019-01-01
2:        b 2019-01-01
3:        c 2019-01-01
4:        d 2019-01-01

因此从dt2 中进行选择,其中每个类别的日期大于dt1 中的日期。

【问题讨论】:

  • 为什么c 和d 不在输出中?
  • 在编辑中修复了它。在我的示例中,它应该返回前两行,因此在创建 MWE 时我犯了一个错误。

标签: r dplyr data.table


【解决方案1】:

下面的非 equi 连接应该可以工作

dt2[ dt1, 
     .( Category, Max.Date = x.Max.Date ), 
     on = .( Category, Max.Date > Max.Date ) ][]

应该工作,导致:

#    Category   Max.Date
# 1:        a 2019-01-01
# 2:        b 2019-01-01
# 3:        c 2019-01-01
# 4:        d 2019-01-01

【讨论】:

    猜你喜欢
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2021-11-25
    • 2021-10-20
    • 2010-12-02
    相关资源
    最近更新 更多