Ho il seguente data.table
fusibile fusione/dcast in un solo passo
library(data.table)
testdt <- data.table(var1=rep(c("a", "b"), e=3), p1=1:6, p2=11:16)
# var1 p1 p2
#1: a 1 11
#2: a 2 12
#3: a 3 13
#4: b 4 14
#5: b 5 15
#6: b 6 16
devo avere il valore mediano di ogni var1
per ogni p*
, il p*
dovrebbe essere in righe e differenti valori unici di var1
in colonne.
Così, sto cercando questa uscita:
variable a b
1 p1 2 5
2 p2 12 15
Il modo più semplice che ho trovato per farlo è:
dcast(melt(testdt, id.vars = "var1", measure.vars = c("p1", "p2")),
variable ~ var1,
value.var = "value",
fun.aggregate = median)
Ma ho la sensazione che mi manca qualcosa qui (come il funzione più adatta) quindi mi piacerebbe sapere un modo diretto (funzione unica) per fare lo stesso.
Sono consapevole recast
del pacchetto reshape2 potrebbe fare il trucco con recast(testdt, variable~var1, fun=median, id.var="var1")
, ma mi piacerebbe evitare di caricare un altro pacchetto.
Edit:
Sto cercando una soluzione semplice e efficiente. Questo sarebbe applicato in un elenco di ~ 40 tabelle con ~ 300 colonne e ~ 80 righe
Prova 'testdt [, lapply (.SD, mediana), var1]' ma questa è la trasposizione di quello che volevi. – akrun
grazie a @akrun, già provato ma ho bisogno della parte "transpose" – Cath
Presumo che questo sia * non * correlato alle prestazioni. È corretto? – A5C1D2H2I1M1N2O1R2T1