2016-09-22 3 views
0

Ich möchte zwei Werte in einer Spalte verbinden, anstattWie verschachtelte Werte in einer Spalte mit Tidyjson verbinden?

'{"name": {"first": "bob", "last": "jones"}, "age": 32}' %>% 
spread_values(
first.name = jstring("name", "first"), 
age = jnumber("age") 
) %>% 
unite(conc, c("first.name", "age"), sep=" ") 

verbreiten Aber ich halte mit den folgenden Fehler

Alle select() Eingänge lösen müssen Spaltenpositionen in Integer. Die folgende nicht: c („first.name“, „Alter“)

Mein Wunsch Ausgang ist eine neue Spalte „Konz“ sowohl first.name ersetzen und Alter haben und dass jeder String-Wert verketten . wie "jones 32"

Was komisch ist, denn wenn ich die letzte Zeile entferne gibt es mir einen richtigen data.frame und ich kann auf first.name und alge zugreifen.

Irgendwelche Hinweise?

+0

Was ist die gewünschte Ausgabe? –

+0

'{{name}: {" first ":" bob "," last ":" jones "}," alter ": 32} '%>% jsonlite :: fromJSON()%>% as.data.frame() 'ist in Ordnung. – alistaire

Antwort

0

Obwohl tbl_json Objekte aus tbl_df erben, sie manchmal spielen nicht schön, wenn Sie das Parsen sind fertig und beginnen in tidyjson und dplyr weitere Manipulation zu tun. Der Grund ist, dass Sie zusätzliche Methoden und Attribute haben, die nicht mehr benötigt werden.

Als Ergebnis einmal fertig Parsing, ist es eine gute Gewohnheit tbl_df oder as_data_frame zu verwenden, um die tbl_json Komponente des Objekts abzustreifen. Ich bevorzuge tbl_df weil es kürzer ist.

ich die Entwicklungsversion von Github bin mit: devtools::install_github('jeremystan/tidyjson')

ich den Fehler nicht reproduzieren konnten, die Sie erwähnen, aber das scheint zu funktionieren:

library(tidyjson) 
library(tidyr) 

"{\"name\": {\"first\": \"bob\", \"last\": \"jones\"}, \"age\": 32}" %>% 
spread_values(first.name = jstring("name","first") 
    , age = jnumber("age") 
) %>% 
tbl_df() %>% 
unite(conc, c("first.name", "age"), sep = " ") 

#> # A tibble: 1 x 2 
#> document.id conc 
#> *  <int> <chr> 
#> 1   1 bob 32 

Andere zu denken, wenn Strings verketten, ist Verwenden Sie paste() oder paste0() innerhalb mutate. mutate wird auch von tidyjson unterstützt, so dass es während der Analyse von JSON in der Pipeline verwendet werden kann. paste(.,collapse=',') kann auch hilfreich sein, wenn mehrere Zeilen mit summarize zusammengefasst werden.

Verwandte Themen