【发布时间】:2018-06-13 05:26:55
【问题描述】:
我有两个要比较的数据框。
instances <- data.frame(id = c("AED","AED","CFR","DRR","DRR","DRR","UN","PO"),
dates = as.POSIXct(c("2018-05-17 09:52:00","2018-05-17 10:49:00","2018-05-17 10:38:00","2018-05-17 11:29:00","2018-05-17 12:12:00","2018-05-17 13:20:00","2018-05-17 14:28:00","2018-05-17 15:59:00")))
ranges <- data.frame(id = c("AED","CFR","DRR","DRR","UN"),
start = as.POSIXct(c("2018-05-17 10:00:00","2018-05-17 10:18:00","2018-05-17 11:18:00","2018-05-17 13:10:00","2018-05-17 14:18:00")),
end = as.POSIXct(c("2018-05-17 11:56:00","2018-05-17 12:23:00","2018-05-17 12:01:00","2018-05-17 14:18:00",NA)))
通过 id,我想将实例数据框中的每个日期与范围数据框中列出的相应日期范围进行比较。如果范围数据帧中没有匹配的 id,那么它应该返回 FALSE,如果 range$end 是 NA,它也应该返回 FALSE。结果应该如下:
result <- data.frame(id = c("AED","AED","CFR","DRR","DRR","DRR","UN","PO"),
dates = c("2018-05-17 09:52:00","2018-05-17 10:49:00","2018-05-17 10:38:00","2018-05-17 11:29:00","2018-05-17 12:12:00","2018-05-17 13:20:00","2018-05-17 14:28:00","2018-05-17 15:59:00"),
inRange = c(FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE),
outsideRange = c(TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE))
【问题讨论】:
-
我认为大卫在这里的回答应该接近涵盖这个 - stackoverflow.com/a/41132376/496803 类似:
instances[ranges, on=c("id","dates>=start","dates<=end"), hit := 1] -
ranges中有两个带有“DRR”的id。你怎么知道什么时候选择哪一个? -
为什么你需要一个 inRange 和 outsideRange 变量,为什么你想要的结果中的所有行都不相反?