2015-12-28 124 views
1

我想使用data.table僅基於爲每個組找到的第一個n觀察值進行彙總統計。我有一個解決方案,可以在下面工作,但我有一個嘮叨的感覺,這可能被寫成data.table單線程,但我不知道如何。每組n個第一次觀察的Data.table摘要統計量

library(data.table) 
DT <- data.table(y=1:10, grp=rep(1:2,5)) 

這將產生

 y grp 
1: 1 1 
2: 2 2 
3: 3 1 
4: 4 2 
5: 5 1 
6: 6 2 
7: 7 1 
8: 8 2 
9: 9 1 
10: 10 2 

我基本上要打基礎,比如說,前兩個觀察各組y彙總統計。下面的命令給了我這得到

grp idx y 
1: 1 1 1 
2: 1 2 3 
3: 1 3 5 
4: 1 4 7 
5: 1 5 9 
6: 2 1 2 
7: 2 2 4 
8: 2 3 6 
9: 2 4 8 
10: 2 5 10 

,然後我可以再次使用data.table創建基於相應的選擇摘要索引(按組)

DT2 <- DT[, .(idx = 1:.N, y), by=grp] 

DT2[idx<3, .(my = mean(y)), by=grp] 

得到

grp my 
1: 1 2 
2: 2 3 

是否有可能寫這爲data.table單一的電話嗎?

回答

3

的一個電話解決方案是

DT[, .(my = mean(y[1:2])), by = grp] 
+0

是啊 - 謝謝你。奇妙的短。如果只有一個單獨的觀察結果,而不是我提供的笨拙解決方案(沒有提到這種特殊情況),那麼這個一行就會產生「NA」。這可以修改嗎? – ekstroem

相關問題