将带有坐标的 json 文件取消嵌套到 R 中的数据框中
Unnest json file with coordinates into dataframe in R
我在将 json 文件解析为 R 中的数据框时遇到问题。我已经能够将 json 文件转换为数据框,但我似乎做不到取消嵌套 "geometry" 列。下面是 json 文件
的示例
[
{
"point_id": 4,
"geometry": {
"type": "Point",
"coordinates": [
-101.5961904,
31.7070736
]
},
"NumericID": "4543842",
}
]
当我尝试使用下面的代码取消嵌套时,出现错误。
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]
谢谢
使用jsonlite::stream_in()
读取JSON-文件(我在JSON-文件中多次复制你的例子):
df <- stream_in(file("test.json"))
编辑:
取消嵌套几何列:
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
中的值
我在将 json 文件解析为 R 中的数据框时遇到问题。我已经能够将 json 文件转换为数据框,但我似乎做不到取消嵌套 "geometry" 列。下面是 json 文件
的示例[
{
"point_id": 4,
"geometry": {
"type": "Point",
"coordinates": [
-101.5961904,
31.7070736
]
},
"NumericID": "4543842",
}
]
当我尝试使用下面的代码取消嵌套时,出现错误。
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]
谢谢
使用jsonlite::stream_in()
读取JSON-文件(我在JSON-文件中多次复制你的例子):
df <- stream_in(file("test.json"))
编辑:
取消嵌套几何列:
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