【问题标题】:Iterating through JSON elements to fix missing values using R and jsonlite使用 R 和 jsonlite 遍历 JSON 元素以修复缺失值
【发布时间】:2020-11-14 14:14:26
【问题描述】:

我正在处理一个 JSON 文件,并尝试使用 jsonlite 包将其扁平化为 data.frame

数组中的主要对象集没有键,因此它不是扁平化成行,而是为每个对象(及其键值对)创建一列。

如何遍历 JSON 对象以向每个对象值添加一个键,以便我可以将此数据视为可读的data.frame

这是我正在使用的代码:

jsonfile <- jsonlite::fromJSON("filename"), simplifyDataFrame=TRUE)

所以这个:

{
  "SUCCESS ACADEMY": {
    "districtName": "SUCCESS SD",
    "isPublic": true
  },
  "FAILURE ACADEMY": {
    "districtName": "FAIL SD",
    "isPublic": true
  }
}

变成这样:


+------------------------------+--------------------------+------------------------------+--------------------------+
| SUCCESS ACADEMY.districtName | SUCCESS ACADEMY.isPublic | Failure Academy.districtName | Failure Academy.isPublic |
+------------------------------+--------------------------+------------------------------+--------------------------+

当我想要这个时:

+-----------------+--------------+----------+
|   School Name   | districtName | isPublic |
+-----------------+--------------+----------+
| SUCCESS ACADEMY | SUCCESS SD   | true     |
| FAILURE ACADEMY | FAIL SD      | true     |
+-----------------+--------------+----------+

【问题讨论】:

    标签: r json jsonlite


    【解决方案1】:

    可能有一种直接的方法,但将其视为数据帧列表,然后将它们绑定在一起似乎就足够了:

    library(data.table)
    library(magrittr)
    
    jsonlite::fromJSON(txt= '{
      "SUCCESS ACADEMY": {
        "districtName": "SUCCESS SD",
        "isPublic": true
      },
      "FAILURE ACADEMY": {
        "districtName": "FAIL SD",
        "isPublic": true
      }
    }') %>% 
      lapply(as.data.table) %>%
      rbindlist(idcol = "School_name")
    

    【讨论】:

    • 这对我来说是完美的,谢谢 Hugh。是 lapply 将每个项目视为一个数据框,然后 rbindlist 将它们绑定在一起?
    猜你喜欢
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多