3
我有两个data.frames每个与时间序列。我的目标是使用df2的时间序列来标记df1中最接近的时间戳。 df2中的每个时间戳只应在df1中标记一个时间戳!R data.table滚动连接“mult”不按预期方式工作
dates1 <- as.POSIXct(c("2015-10-26 12:00:00","2015-10-26 13:00:00","2015-10-26 14:00:00"))
values1 <- c("a","b","c")
dates2 <- as.POSIXct(c("2015-10-26 12:05:00","2015-10-26 13:55:00"))
values2 <- c("A","C")
df1 <- data.frame(dates1, values1)
df2 <- data.frame(dates2, values2)
期望的结果:
dates2 values2 values1
1: 2015-10-26 12:00:00 A a
2: 2015-10-26 13:00:00 NA b
3: 2015-10-26 14:00:00 C c
为了实现这一目标,我转换data.frames到data.tables和使用滚动joing “最近”,像这样:
dt1 <- data.table(df1)
dt2 <- data.table(df2)
setkey(dt1,"dates1")
setkey(dt2,"dates2")
dt3 <- dt2[dt1,roll = "nearest"]
dates2 values2 values1
1: 2015-10-26 12:00:00 A a
2: 2015-10-26 13:00:00 A b
3: 2015-10-26 14:00:00 C c
使用值2“A”两次,一次用于12:00时间戳,一次用于13:00。我希望每个值2只能使用一次,并查阅data.table手册,我期望通过使用选项mult =“first”来解决此问题。
dt3 <- dt2[dt1,roll = "nearest", mult = "first"]
这导致相同的输出,“A”使用两次。我的错误在哪里?
@大卫Arenburg:非常感谢你的帮助!我一直重复使用这个脚本和其他输入。但是你在这里做了什么魔术。 “values2:= i.values2”。这个“我”在哪里?来自?我扫描了这个功能的文档,但没有找到一个完美的。 – Ratnanil
'i.'表示从'i'参数中的数据集取得的值。如果你做'dt1 [dt2]',那么'dt2'在'dt1'的第i个参数中,因为你可能知道一个'data.table'对象的形式是DT [i,j,by ]'。所以如果你想确保你在'dt1 [dt2]'时从'dt2'中提取列,那么最好使用'i.'(如果两个数据集中有相同的列)。 –