将JSON解析为数据帧

时间:2017-04-06 15:15:45

标签: json r dataframe

不确定如何执行此操作:

我有一个像这样存储的东西(在a中):

[
  "MULTIPOLYGON (((-95.0000000372529 40.999989970587194, -94.5000000372529 40.999989970587194, -94.5000000372529 40.499989970587194, -95.0000000372529 40.499989970587194)))"
]

typeof(a) # prints "character"
class(a)  # prints "json"

我想把它转换成一个看起来像这样的data.frame(不需要对数字进行舍入,只是更容易输入)

  X1  X2
1 -95 40
2 -94 40
3 -94 40
4 -95 40

我试过

a.df<-as.data.frame(as.matrix(a))

但打印

 V1
1 [\n  "MULTIPOLYGON (((-95.0000000372529 40.999989970587194, -94.5000000372529 40.999989970587194, -94.5000000372529 40.499989970587194, -95.0000000372529 40.499989970587194)))"\n]\n

1 个答案:

答案 0 :(得分:1)

library(sf)
library(jsonlite)
library(tidyverse)

x <- fromJSON('[
  "MULTIPOLYGON (((-95.0000000372529 40.999989970587194, -94.5000000372529 40.999989970587194, -94.5000000372529 40.499989970587194, -95.0000000372529 40.499989970587194)))"
]')

map(x, st_as_sfc) %>%
  map(~as.data.frame(.[[1]][[1]]))
## [[1]]
##      X1       X2
## 1 -95.0 40.99999
## 2 -94.5 40.99999
## 3 -94.5 40.49999
## 4 -95.0 40.49999

现在:

wkt2geojson('[
  "MULTIPOLYGON (((-95.0000000372529 40.999989970587194, -94.5000000372529 40.999989970587194, -94.5000000372529 40.499989970587194, -95.0000000372529 40.499989970587194)))"
]')

也有点工作,但会发出警告。

了解在这样的配置中创建此WKT的实际来源将是有帮助的