Anwenden einer Funktion auf jede Zeile einer Datentabelle
Ich suche nach einer Möglichkeit, eine Funktion effizient auf jede Zeile der data.table anzuwenden. Betrachten wir die folgende Datentabelle:
library(data.table)
library(stringr)
x <- data.table(a = c(1:3, 1), b = c('12 13', '14 15', '16 17', '18 19'))
> x
a b
1: 1 12 13
2: 2 14 15
3: 3 16 17
4: 1 18 19
Angenommen, ich möchte jedes Element der Spalte aufteilenb
durch Leerzeichen (so ergeben sich zwei Zeilen für jede Zeile in den Originaldaten) und verknüpfen Sie die resultierenden Datentabellen. Für das obige Beispiel benötige ich folgendes Ergebnis:
a V1
1: 1 12
2: 1 13
3: 2 14
4: 2 15
5: 3 16
6: 3 17
7: 1 18
8: 1 19
Folgendes würde funktionierenwenn Spaltea
hat nur eindeutige Werte:
x[, list(str_split(b, ' ')[[1]]), by = a]
Folgendefast funktioniert (es sei denn, die ursprüngliche Datentabelle enthält identische Zeilen), ist aber hässlich, wennx
hat viele spalten und kopiert spalte b zum ergebnis, was ich vermeiden möchte.
> x[, list(str_split(b, ' ')[[1]]), by = list(a,b)]
a b V1
1: 1 12 13 12
2: 1 12 13 13
3: 2 14 15 14
4: 2 14 15 15
5: 3 16 17 16
6: 3 16 17 17
7: 1 18 19 18
8: 1 18 19 19
Was wäre der effizienteste und idiomatischste Weg, um dieses Problem zu lösen?