与此处的 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的数据Alength(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
提前感谢您的帮助!