2017-10-19 177 views
0

我在解析一个json文件到R中的数据框时遇到了麻烦。我已经能够将json文件转换为数据框,但我似乎无法表达“几何”栏。下面是一个json文件样本Unnest json文件的坐标转换为R中的数据框

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

当我试图unnest使用下面的代码,我得到一个错误。

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] 

感谢

回答

0

使用jsonlite::stream_in()读取JSON文件(我在一个JSON文件复制你的榜样几次):

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

编辑:

Unnesting几何列:

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 

现在您可以访问data.frame的值

+0

非常好,感谢您的帮助! – jsimpsno