Strsplit auf einer Spalte eines Datenrahmens [duplizieren]
Diese Frage hat hier bereits eine Antwort:
Kommagetrennte Zeichenfolgen in einer Spalte in separate Zeilen aufteilen 4 AntwortenIch habe eindata.frame
wobei eine der Variablen ein Vektor (oder eine Liste) ist, wie folgt:
MyColumn <- c("A, B,C", "D,E", "F","G")
MyDF <- data.frame(group_id=1:4, val=11:14, cat=MyColumn)
# group_id val cat
# 1 1 11 A, B,C
# 2 2 12 D,E
# 3 3 13 F
# 4 4 14 G
Ich hätte gerne einen neuen Datenrahmen mit so vielen Zeilen wie der Vektor
FlatColumn <- unlist(strsplit(MyColumn,split=","))
was so aussieht:
MyNewDF <- data.frame(group_id=c(rep(1,3),rep(2,2),3,4), val=c(rep(11,3),rep(12,2),13,14), cat=FlatColumn)
# group_id val cat
# 1 1 11 A
# 2 1 11 B
# 3 1 11 C
# 4 2 12 D
# 5 2 12 E
# 6 3 13 F
# 7 4 14 G
m Wesentlichen für jeden Faktor, der ein Element der Liste von @ iMyColumn
(die Buchstaben A bis G) möchte ich die entsprechenden Werte der Liste zuweisen. Jeder Faktor erscheint nur einmal inMyColumn
.
Gibt es einen guten Weg für diese Art des Umformens / Aufhebens / Zusammenführens? Ich habe mir ein sehr umständliches @ ausgedacfor
-Schleife über die Zeilen vonMyDF
un die Länge des entsprechenden Elements vonstrsplit(MyColumn,split=",")
. Ich bin mir sehr sicher, dass es einen eleganteren Weg geben muss.