R:从JSON文件中选择某个

时间:2017-09-22 00:36:17

标签: json r geojson

我已经从(http://eric.clst.org/wupl/Stuff/gz_2010_us_040_00_20m.json)将一个JSON文件导入到R中,我试图只选择堪萨斯州的县。 现在我把所有数据都放到一个变量中,我试图制作这个只是堪萨斯州的子数据。我不知道该如何解决这个问题。

3 个答案:

答案 0 :(得分:1)

您所拥有的内容geoJson可以library(sf)直接阅读,以便为您提供sf个对象,该对象也是data.frame。然后,您可以使用通常的data.frame子集操作

library(sf)

sf <- sf::read_sf("http://eric.clst.org/wupl/Stuff/gz_2010_us_040_00_20m.json")

sf[sf$NAME == "Kansas", ]

# Simple feature collection with 1 feature and 5 fields
# geometry type:  MULTIPOLYGON
# dimension:      XY
# bbox:           xmin: -102.0517 ymin: 36.99308 xmax: -94.58993 ymax: 40.00316
# epsg (SRID):    4326
# proj4string:    +proj=longlat +datum=WGS84 +no_defs
#         GEO_ID STATE   NAME LSAD CENSUSAREA                       geometry
# 30 0400000US20    20 Kansas        81758.72 MULTIPOLYGON(((-99.541116 3...

看到你想要的各个县,你需要使用县数据集

sf_counties <- sf::read_sf("http://eric.clst.org/wupl/Stuff/gz_2010_us_050_00_500k.json")
sf_counties[sf_counties$STATE == 20, ]

答案 1 :(得分:1)

要继续使用JSON工作流程,可以尝试jqr

library(jqr)
url <- 'http://eric.clst.org/wupl/Stuff/gz_2010_us_040_00_20m.json'
download.file(url, (f <- tempfile(fileext = ".json")))
res <- paste0(readLines(f), collapse = " ")
out <- jq(res, '.features[] | select(.properties.NAME == "Kansas")')

可以轻松映射

library(leaflet)
leaflet() %>% 
  addTiles() %>% 
  addGeoJSON(out) %>% 
  setView(-98, 38, 6)

答案 2 :(得分:0)

library(rjson)
lst=fromJSON(file =  'http://eric.clst.org/wupl/Stuff/gz_2010_us_040_00_20m.json')

index = which(sapply(lapply(lst$features,"[[",'properties'),'[[','NAME')=='Kansas')

subdata = lst$features[[index]]