Das data.table
Paket fügte eine neue Funktion melt
Daten in mehrere Spalten gleichzeitig hinzu. Das ist sehr nützlich, aber ich kann nicht herausfinden, wie man das "Suffix" der vorher geschmolzenen Variablennamen erhält. Zum Beispiel:Schmelz- und Umwandlungsdatentabelle mit Muster
library(data.table)
# create data table
dt <- data.table(id = seq(3), a_3 = seq(3), a_4 = seq(4, 6), b_3 = seq(7, 9), b_4 = seq(10, 12))
# melt and cast in one step using new feature
m1 <- melt(dt, id.vars='id', measure=patterns("a_", "b_"), value.name=c("a_", "b_"))
Ergebnisse in der Datentabelle:
id variable a_ b_
1: 1 1 1 7
2: 2 1 2 8
3: 3 1 3 9
4: 1 2 4 10
5: 2 2 5 11
6: 3 2 6 12
Dies ist die "Form" ich will, aber die Variablen a_3
, a_4
, b_3
und b_4
haben 1
und 2
indexiert. Was ich will, ist die variable
Spalte zu enthalten 3,3,3,4,4,4
, nach den Suffixen der Variablennamen.
Ich könnte natürlich das "altmodische" Weg mit melt
, strsplit
, dcast
tun, aber das ist irgendwie umständlich. Ich hoffe auf eine One-Line-Lösung, die immer noch sehr schnell ist.
Das funktioniert. Ich habe so etwas gemieden, weil ich in meiner realen Situation Tausende von Variablen habe und nicht auflisten möchte, was all ihre Suffixe sind. Ich nehme an, ich könnte 'gsub' auf der Liste der Variablennamen verwenden, um alle Suffixe zu isolieren, aber dann wird es ziemlich nah an der Menge an Aufwand in der 'schmelzen', 'strsplit', 'dcast' Ansatz ... – dmp
Das 'c (3,4)' könnte durch 'sub ("^a_ "," ", Namen (dt) [grepl ("^a_ ", Namen (dt))])' ersetzt werden, die möglicherweise sortiert werden müssen wenn sie nicht natürlich so sind. –
Danke. Das ist eine Art der verwickelten Sache, die ich vermeiden wollte. Meine Variablensuffixe sind Zeichenfolgen, die nicht unbedingt sortiert sind, und es gibt viele davon. Ich hatte gehofft, dass es eine "natürliche" Art und Weise geben würde, diese Funktion von 'melt.data.table' zu verwenden, aber ich kann einen Hinweis darauf nehmen, dass dies nicht der Fall ist. Danke für deine Hilfe trotzdem! – dmp