0

与此处的 do.call/lapply 方法和此处data.table方法类似,但两者都具有以下设置:

  • 带有数据和开始日期/结束日期范围的 MainDF
  • 带有单个日期向量的 SubDF

用户在哪里寻找与每个 SubDF 日期重叠的所有 MainDF 范围的摘要。我有

  • 带有数据和单个日期向量的 MainDF
  • 具有开始日期/结束日期范围的 SubDF

并且我希望将摘要附加到 SubDF,以获取属于每个 SubDF 范围内的多行 MainDF 数据。例子:

library(lubridate)
MainDF <- data.frame(Dates = seq.Date(from = as.Date("2020-02-12"),
                                      by = "days",
                                      length.out = 10),
                     DataA = 1:10)
SubDF <- data.frame(DateFrom = as.Date(c("2020-02-13", "2020-02-16", "2020-02-19")),
                    DateTo = as.Date(c("2020-02-14", "2020-02-17", "2020-02-21")))
SubDF$interval <- interval(SubDF$DateFrom, SubDF$DateTo)

从第二个链接尝试 data.table 方法我认为它应该是这样的:

MainDF[SubDF, on = .(Dates >= DateFrom, Dates <= DateTo), allow = TRUE][
, .(SummaryStat = max(DataA)), by = .(Dates)]

但它与未使用的参数错误on。在我的实际数据上,我通过使用 (相当于) 得到了一个结果max(MainDF$DataA),但它是第二个值的 3 次重复(在我的实际数据中,最后一行不会运行,因为它没有 DateTo 的值)。我怀疑使用MainDF$手段我已经颠覆了分组。

我怀疑我已经接近了,但我真的很难data.table理解复杂用例的思维方式。我想要做的汇总统计数据是(例如数据):

  • Mean&Max的数据A
  • length(which(DataA > 3))
  • difftime(last(Dates), first(Dates), units = "mins")
  • Dates[which.max(DataA)]

我添加了interval上面的行,因为它data.table%between%帮助表明一个人可能能够使用一种Dates %between% interval格式,但它没有在文本或示例中具体提到间隔/差异时间,而且我的尝试已经在其他地方失败了,所以我不愿意专注于改进我的跑不动了就跑!

我一直专注于 data.table 方法,因为它用于类似的问题,但我一直想知道是否可以使用dplyr's group_by/代替?'s似乎仅限于对列的测试(例如它们是因素),而不是与列行中的数据相关,但我可能是错的。group_by_ifgroup_by_if.predicate

提前感谢您的帮助!

4

0 回答 0