根据最接近的时间戳在R中连接两个数据帧

Joh*_*ohn 9 timestamp r dataframe posixct dplyr

您好我有两个表(表1和表2下文),并希望基于最接近时间戳形成expected_output加入他们的行列.如果可能的话,涉及dplyr的某种解决方案会很好,但如果它进一步使事情变得复杂则不会.

table1 = 
structure(list(date = structure(c(1437051300, 1434773700, 1431457200
), class = c("POSIXct", "POSIXt"), tzone = ""), val1 = c(94L, 
33L, 53L)), .Names = c("date", "val1"), row.names = c(NA, -3L
), class = "data.frame")

table2 = 
structure(list(date = structure(c(1430248288, 1435690482, 1434050843
), class = c("POSIXct", "POSIXt"), tzone = ""), val2 = c(67L, 
90L, 18L)), .Names = c("date", "val2"), row.names = c(NA, -3L
), class = "data.frame")

expected_output = 
structure(list(date = structure(c(1437051300, 1434773700, 1431457200
), class = c("POSIXct", "POSIXt"), tzone = ""), val1 = c(94L,
33L, 53L), val2 = c(90L, 18L, 67L)), .Names = c("date", "val1", 
"val2"), row.names = c(NA, -3L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

Aru*_*run 14

使用滚动加入的功能data.tableroll = "nearest":

require(data.table) # v1.9.6+
setDT(table1)[, val2 := setDT(table2)[table1, val2, on = "date", roll = "nearest"]]
Run Code Online (Sandbox Code Playgroud)

此处,val2通过使用选项对列执行连接来创建列.对于每一行,计算最接近的匹配行,并提取相应的行.dateroll = "nearest"table1$datetable2$dateval2

  • @emudrak `roll=Inf` 方向无限制。`roll=30` 对陈旧的方向限制。使用符号来控制方向。 (2认同)