2017-10-19 10 views
0

J'ai du mal à analyser un fichier json dans une base de données dans R. J'ai été en mesure de transformer le fichier json dans un bloc de données, mais je ne peux pas sembler inégal la colonne "géométrie". Ci-dessous un exemple du fichier jsonUnnest fichier json avec des coordonnées dans la structure de données dans R

[ 
{ 
    "point_id": 4, 
    "geometry": { 
     "type": "Point", 
     "coordinates": [ 
      -101.5961904, 
      31.7070736 
     ] 
    }, 
    "NumericID": "4543842", 
} 
] 

Lorsque j'essaie de ne plus utiliser le code ci-dessous, j'obtiens une erreur.

ex_data<-lapply(ex_data, function(x) ifelse (x == "NULL", NA, x)) 
ex_data<-as.data.frame(do.call(rbind, ex_data)) 
ex_data<-ex_data%>% bind_rows(ex_data) %>% # make larger sample data 
mutate_if(is.list, simplify_all) # flatten each list element internally 
ex_data%>%unnest(geometry)->ex_data_unnest 
Error: Each column must either be a list of vectors or a list of data frames 
[geometry] 

Merci

Répondre

0

Utilisez jsonlite::stream_in() pour lire le JSON-fichier (je copiais votre exemple en plusieurs fois JSON-file):

df <- stream_in(file("test.json")) 

Edit:

désimbrication les colonnes de géométrie:

df <- as.data.frame(cbind(df[,-2], 
    do.call(rbind,df$geometry$coordinates),  
    df$geometry$type), 
    stringsAsFactors = F) 
names(df)[3:5] <- c("geometry.coordinates1","geometry.coordinates2","geometry.type") 

df 
    point_id NumericID geometry.coordinates1 geometry.coordinates2 geometry.type 
1   4 4543842    -101.5962    31.70707   Point 
2   4 4543842    -101.5962    31.70707   Point 

Maintenant, vous pouvez accéder aux valeurs de data.frame

+0

Excellent, merci pour l'aide! – jsimpsno