Was ist der idiomatische data.table-Ansatz, um eine data.table mit separaten Spalten für Elemente eines Vektors zu erzeugen, die von einer Funktion zurückgegeben werden, berechnet nach Gruppe?transponierter Vektor nach Gruppe in data.table
Betrachten Sie die data.table:
library(data.table)
data(iris)
setDT(iris)
Wenn die Funktion range()
ist, ich die Ausgabe auf ähnliche wollen würde:
iris[, .(min_petal_width = min(Petal.Width),
max_petal_width = max(Petal.Width)
), keyby = Species] # produces desired output
aber die range()
Funktion.
kann ich dcast
verwenden, aber es ist hässlich:
dcast(
iris[, .(petal_width = range(Petal.Width),
value = c("min_petal_width", "max_petal_width")),
keyby = Species],
Species ~ value, value.var = "petal_width")
Ich hoffe, es ist ein einfacher Ausdruck, entlang der Linien von:
iris[, (c("min_petal_width","max_petal_width")) = range(Petal.Width),
keyby = Species] # doesn't work
Dies stellt keine neue data.table zurück, aber es ändert Iris data.table an Ort und Stelle zwei Spalten, um es – digEmAll
@digEmAll hinzufügen, oh, du ist natürlich recht. –