2017-12-28 3 views
0

Stellen Sie sich zwei Distributionen haben sich aus zwei einer gespeicherten Simulationen in data.frame:Ordnen durch Bezugnahme eine Liste der Ergebnisse auf eine Anzahl von Spalten einer data.table

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

Jetzt wollen wir die 10% finden und 90% Perzentile jeder Verteilung.

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

ich diese Ergebnisse in einem data.table speichern möchte, indem durch Verweis zuweisen (:=): Dies kann durch geschehen. Allerdings muss ich zuerst results in der entsprechenden Form (d. H. Eine Datentabelle von 1 Zeile und 4 Spalten) erhalten. Um dies zu tun, ich gelte anschließend unlist, matrix und as.data.table zu results:

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

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

Ich mag das nicht. Gibt es einen kürzeren Weg dazu?

+1

warum "1 Zeile 4 Spalten"? – MichaelChirico

+0

@MichaelChirico, weil 'DT' auch aus anderen Zeilen besteht – koteletje

Antwort

0

Nicht unbedingt kürzer, aber alles in 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')] 

die gibt:

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