2013-08-12 25 views
4

我的問題是有關這一個:將矢量輸出與其他列一起轉換爲data.table中的列?

Turn vector output into columns in data.table?

但我的情況有點複雜。我不僅將列向量作爲列返回,而且還將同時計算其他列。例如:

DT = data.table(X = 1:10, Y = 11:20, Z = 21:30, group = rep(1:10, each = 3)) 

featuresDT <- quote(list(x = mean(X), 
         y = mean(Y), 
         z = mean(Z), 
         as.list(quantile(X)))) 

DT[, eval(featuresDT), by = "group"] 

其中quantile返回長度爲5的矢量。而不是得到一個8列data.table,我得到一個4列和quantile結果顯示爲額外的行和x, y and z重複5次。我也試過dist = as.list(quantile(X),但是給出了相同的結果,但列名不同。

+1

可以請你提供一個可重複的例子嗎? – statquant

+0

@statquant done – mchangun

回答

3

你應該只改變listcclist類型的任何值會自動導致list):

featuresDT <- quote(c(x = mean(X), 
         y = mean(Y), 
         z = mean(Z), 
         as.list(quantile(X)))) 
DT[, eval(featuresDT), by = "group"] 

    group  x  y  z 0% 25% 50% 75% 100% 
1:  1 2.000000 12.00000 22.00000 1 1.5 2 2.5 3 
2:  2 5.000000 15.00000 25.00000 4 4.5 5 5.5 6 
3:  3 8.000000 18.00000 28.00000 7 7.5 8 8.5 9 
4:  4 4.333333 14.33333 24.33333 1 1.5 2 6.0 10 
5:  5 4.000000 14.00000 24.00000 3 3.5 4 4.5 5 
6:  6 7.000000 17.00000 27.00000 6 6.5 7 7.5 8 
7:  7 6.666667 16.66667 26.66667 1 5.0 9 9.5 10 
8:  8 3.000000 13.00000 23.00000 2 2.5 3 3.5 4 
9:  9 6.000000 16.00000 26.00000 5 5.5 6 6.5 7 
10: 10 9.000000 19.00000 29.00000 8 8.5 9 9.5 10 
1

試試這個:

featuresDT <- quote(cbind(list(x = mean(X), 
         y = mean(Y), 
         z = mean(Z)), 
         as.data.table(t(quantile(X))))) 
+0

工作原理 - 謝謝!有沒有辦法讓我改變列名?我正在爲X Y和Z做分位數,現在的解決方案給了我重複的列名稱。 – mchangun

+1

@mchangun只需編寫'X = as.data.table(...'和一個「X.」就可以作爲當前列名的前綴 – Frank

+0

@Frank - 修正了它,謝謝 – mchangun