2017-12-28 5 views
0

の列数を参照することにより、結果のリストを割り当て、あなたがdata.frameに保存されている2つのシミュレーションの結果2つの分布持って想像:今data.table

sim1 = 1:10 
sim2 = 91:100 
sim = data.frame(sim1, sim2) 

を、我々は10%を見つけたいです各分布の90%パーセンタイル。 Iが基準(:=)によって割り当てることによってdata.tableにこれらの結果を保存したい

diffSim = ncol(sim) 
confidenceInterval = c(0.1, 0.9) 
results = lapply(1:diffSim, function(j) {quantile(sim[, j], confidenceInterval, 
            names = FALSE, type = 3)}) 

:これは、ことによって行うことができます。しかし、まず、resultsを適切な形(すなわち、1行4列のデータテーブル)にする必要があります。そうするために、私はその後resultsunlistmatrixas.data.tableを適用します。

DT = data.table(Col1 = "Result") 

DT[, c("col2", "col3", "col4", "col5") := as.data.table(matrix(unlist(results), nrow = 1))] 

私は、このすべてが好きではありません。これを行うためのより短い方法がありますか?

+1

なぜ "1行4列"? – MichaelChirico

+0

@MichaelChirico、「DT」は他の行も含んでいるため – koteletje

答えて

0
必ずしも

短くないが、data.tableのすべて:

library(data.table) 
setDT(sim)[, .(col1 = 'Result', 
       cols = paste0('col',2:5), 
       vals = unlist(lapply(.SD, quantile, probs = confidenceInterval, type = 3))) 
      ][, dcast(.SD, col1 ~ cols, value.var = 'vals')] 

います:

 col1 col2 col3 col4 col5 
1: Result 1 9 91 99