我試圖使用data.table
進行操作,如果data.table
是專爲此操作設計的,則不需要。假設我有以下使用垂直條件創建一個新的列data.table
set.seed(1)
id<-rep(LETTERS[1:6], each=3)
event<-rep(letters[1:4], each=3, length.out=18)
order<-rep(1:3, 6)
var<-rnorm(18)
dt<-data.table(id, event, order, var)
setkey(dt, id)
id event order var
1: A a 1 -0.62645381
2: A a 2 0.18364332
3: A a 3 -0.83562861
4: B b 1 1.59528080
5: B b 2 0.32950777
6: B b 3 -0.82046838
7: C c 1 0.48742905
8: C c 2 0.73832471
9: C c 3 0.57578135
10: D d 1 -0.30538839
11: D d 2 1.51178117
12: D d 3 0.38984324
13: E a 1 -0.62124058
14: E a 2 -2.21469989
15: E a 3 1.12493092
16: F b 1 -0.04493361
17: F b 2 -0.01619026
18: F b 3 0.94383621
,我需要在一個新的列來計算值之間的Euclidean distance在var
具有不同id
但同樣event
類型,保持觀測的給定order
。
我瞭解,與在data.table
聲明分組by
命令我將數據分成塊,我可以從其他data.table
s的其他塊的連接使用,但我可以做同樣的data.table
內是一回事嗎?
需要明確的是,這是想什麼,我獲得
id event order var euclid
1: A a 1 -0.62645381 3.097720
2: A a 2 0.18364332 3.097720
3: A a 3 -0.83562861 3.097720
4: B b 1 1.59528080 2.433635
5: B b 2 0.32950777 2.433635
6: B b 3 -0.82046838 2.433635
7: C c 1 0.48742905 NA
8: C c 2 0.73832471 NA
9: C c 3 0.57578135 NA
10: D d 1 -0.30538839 NA
11: D d 2 1.51178117 NA
12: D d 3 0.38984324 NA
13: E a 1 -0.62124058 3.097720
14: E a 2 -2.21469989 3.097720
15: E a 3 1.12493092 3.097720
16: F b 1 -0.04493361 2.433635
17: F b 2 -0.01619026 2.433635
18: F b 3 0.94383621 2.433635
非常感謝!
如果有另一個'event = a',說:'id = G,event = a,order = 1:3',你會怎麼想關於它? – Arun
@Arun偉大的問題。可能我想計算每個可能的情侶(如A-E,A-G,E-G)之間的距離,並且總結所有距離。你認爲這是可行的嗎? – Riccardo
如果你要在你的例子中使用'rnorm',使用'set.seed'使它可以重現是很明智的。在這個例子中,我也很難理解你如何計算你的距離。 – thelatemail