我有一个 JSON 文件要导入到 R 中。这是数据的一部分:
{"data":[{"British Columbia":"BC","BC":"4.63"}, {"Alberta":"AB","AB":"4.15"}, {"Ontario":"ON","ON":"13.6"}]}
我需要将此数据转换为数据框,但导入会产生许多 NA 值。
我尝试了以下方法:
library(jsonlite)
jsonData <- fromJSON("filepath")
jsonData
输出:
$data
British Columbia BC Alberta AB Ontario ON Manitoba MB Saskatchewan SK
1 BC 4.63 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
2 <NA> <NA> AB 4.15 <NA> <NA> <NA> <NA> <NA> <NA>
3 <NA> <NA> <NA> <NA> ON 13.6 <NA> <NA> <NA> <NA>
4 <NA> <NA> <NA> <NA> <NA> <NA> MB 1.28 <NA> <NA>
5 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> SK 1.1
这似乎是因为 JSON 文件开头的单个术语“数据”。如何避免这个问题?
所需输出:
British Columbia BC
BC 4.63
Alberta AB
AB 4.15
Ontario ON
ON 13.6
Manitoba MB
MB 1.28
Saskatchewan SK
SK 1.1
鉴于最后 Nonte 中显示的
x
,使用 fromJSON
,提取数据部分,删除 NA 并将类型转换为正确的类型。
library (jsonlite)
library (purrr)
x |>
fromJSON() |>
_$data |>
map_dfr(na.omit) |>
type.convert(as.is = TRUE)
给予
# A tibble: 1 × 6
`British Columbia` BC Alberta AB Ontario ON
<chr> <dbl> <chr> <dbl> <chr> <dbl>
1 BC 4.63 AB 4.15 ON 13.6
x <- '{"data":[{"British Columbia":"BC","BC":"4.63"}, {"Alberta":"AB","AB":"4.15"}, {"Ontario":"ON","ON":"13.6"}]}'