假設在 中有兩個異步時間序列data.table:
dt1 = setkey(data.table(k = 2*(1:4) 1, v = c(10, 15, 9, 7)), k)
dt2 = setkey(data.table(k = 2*(1:3), v = c(11, 13, 6)), k)
我想要的輸出是k使用 LOCF 和kfromdt1和 的所有值將它們合并到列上dt2,如下所示:
> out
k v i.v
2 NA 11
3 10 11
4 10 13
5 15 13
6 15 6
7 9 6
9 7 6
目前,我正在使用一個有點笨拙的結構:
all_keys = setkey(data.table(k = sort(c(dt1[, k], dt2[, k])), k)
dt1[all_keys, roll = T, on = 'k'][
dt2[all_keys, roll = T, on = 'k']]
這行得通,但感覺有點做作。請注意,簡單的滾動dt1[dt2, roll = T]ordt2[dt1, roll = T]會忽略來自dt1or 的鍵dt2。有沒有更簡單的方法?
PS旁注-是否還有一種更簡單的方法可以data.table從一開始就使用data.table函式來創建鍵控,而無需使用setkey?
uj5u.com熱心網友回復:
您可以使用mergewithall=T和setnafillwith type='locf':
setnafill(merge(dt1,dt2,all=T),type="locf")[]
Key: <k>
k v.x v.y
<num> <num> <num>
1: 2 NA 11
2: 3 10 11
3: 4 10 13
4: 5 15 13
5: 6 15 6
6: 7 9 6
7: 9 7 6
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/407036.html
標籤:
下一篇:多語言資料庫設計中的回退
