Qual è l'approccio data.table idiomatic per produrre un data.table con colonne separate per elementi di un vettore restituito da una funzione, calcolato per gruppo?vettore trasposto per gruppo in data.table
consideri il data.table:
library(data.table)
data(iris)
setDT(iris)
Se la funzione è range()
, vorrei l'output simile a:
iris[, .(min_petal_width = min(Petal.Width),
max_petal_width = max(Petal.Width)
), keyby = Species] # produces desired output
ma utilizzando la funzione range()
.
posso usare dcast
, ma è brutto:
dcast(
iris[, .(petal_width = range(Petal.Width),
value = c("min_petal_width", "max_petal_width")),
keyby = Species],
Species ~ value, value.var = "petal_width")
Spero ci sia un'espressione più semplice, seguendo le linee di:
iris[, (c("min_petal_width","max_petal_width")) = range(Petal.Width),
keyby = Species] # doesn't work
Questo non restituisce un nuovo data.table, ma modifica iride data.table sul posto l'aggiunta di due colonne ad esso – digEmAll
@digEmAll, oh, hai ragione, naturalmente. –