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.'(如果兩個數據集中有相同的列)。 –