Ich versuche, eine Spalte "data.frame" automatisch in mehrere Spalten zu konvertieren.Python-ähnliche Liste in verschachtelte Vektoren konvertieren
Hier ist, was die df wie folgt aussieht:
library(dplyr)
foo <- data_frame(ID = c(1,2),
Val = c("A", "B"),
Geom = c("[{X11,Y11,Z11}, {X12,Y12,Z12}, {X13,Y13,Z13}]", "[{X21,Y21,Z21},{X22,Y22,Z22},{X23,Y23,Z23}]"))
Hier ist, was ich möchte aussehen:
bar <- data_frame(ID = c(1,1,1,2,2,2),
Val=c("A", "A", "A", "B", "B", "B"),
Geom1 = c("X11", "X12", "X13", "X21", "X22", "X23"),
Geom2 = c("Y11", "Y12", "Y13", "Y21", "Y22", "Y23"),
Geom3 = c("Z11", "Z12", "Z13", "Z21", "Z22", "Z23"))
Der Workflow ich für eine solche Transformation besteht aus 2 Teilen betrachten:
1 - Konvertieren Geom in eine R-Struktur, wie:
list(c("X11","Y11","Z11"), c(...), ...)
2 - Verwenden Sie tidyr::unnest()
oder tidyr::separate()
solche Liste in Spalten teilen
Ich glaube, ich den zweiten Teil behandeln kann, kann aber nicht den guten Zeiger zum ersten finden. Ich könnte diese Spalte in einen csv schreiben und automatisch danach lesen, aber wenn ich bedenke, dass mein data.frame ein glänzendes reaktives Objekt sein wird, würde das viel Schreiben/Lesen bedeuten.
Ich habe versucht, fromJSON()
(jsonlite, rjson und RJSONIO) zu verwenden, aber da dies keine gültige json-Zeichenfolge ist, wird es nicht analysiert.
@wildintellect im IRC sagte mir, dass fromJSON funktioniert, wenn Sie {} mit []. Ich werde diese verschiedenen Lösungen trotzdem testen und diese vergleichen, wobei ich Pipes über Temp-Variablen bevorzuge :) – RobinCura
Wenn Sie Pipes mögen, können Sie die Antwort des Colonels wie 'setDT (foo) [, Geom%>% gsub (pattern = '\\ [{|} \\]', ersatz = '', perl = WAHR)%>% strsplit (split = '}, * {', perl = T),. (ID, Val)] oder ähnlich in dplyrisch. – Frank
Hat es ohne splitstackshape wie folgt getan: 'setDT (foo) [, strsplit (gsub ('\\ [{|} \\]', '', Geom, perl = T), '}, * {', perl = T),.(ID, Val)]%>% getrennt (V1, in = c ("X", "Y", "Z"), konvertieren = TRUE, sep = ",")%>% mutieren (UID = id (liste (ID, Val))) ' – RobinCura