【问题标题】:R - Query JSON and Save to VariableR - 查询 JSON 并保存到变量
【发布时间】:2021-11-25 00:43:03
【问题描述】:

所以我正在尝试清理 R 中的一些数据,我对 R 不是很有经验。 我想做的是从 JSON 中获取一定的数据并将其存储到 Varaible JSON 很大很乱, 我尝试使用 JSON Lite 并使用 $ 变量选择器,但找不到一种方法来获取我需要的特定数据,关于 R 中的 JSON 操作的信息和资源非常少

Screenshot of JSON

JSON 文件:

{
  "error": false,
  "msg": "all countries and population 1961 - 2018",
  "data": [
    {
      "country": "Arab World",
      "code": "ARB",
      "populationCounts": [
        {
          "year": 1960,
          "value": 92197753
        },
        {
          "year": 1961,
          "value": 94724510
        },
        {
          "year": 1962,
          "value": 97334442
        }
      ]
    }
  ]
}

假设我想将 1962 年的值收集到一个变量中,我这样做的最佳方法是什么

任何建议都会有很大帮助

【问题讨论】:

  • 欢迎来到 Stack Overflow。我们无法从图像中将数据读入 R。请make this question reproducible 包含一个纯文本格式的小型代表性数据集 - 例如dput(yourdata) 的输出,如果不是太大的话。
  • 嘿尼尔!男人我很抱歉!大声笑我在想什么,我现在已经解决了,感谢尼尔的回复(:
  • 谢谢。我认为底部有一点缺失?我加了。

标签: r json json-query


【解决方案1】:

您在列表中有列表, 这有时会使访问正确的数据变得很棘手

分解:

Arab_1962<- myData$PopulationCounts[[1]] 
  • 这将访问您正在寻找的第一个列出的对象

【讨论】:

    【解决方案2】:

    您与jsonlite 是对的。当然,您在 R 中获得的数据结构取决于 JSON 结构本身,因此您需要花一些时间探索 R 中的对象以了解如何操作它。

    假设您有一个类似于示例数据的文件,在当前路径中名为 mydata.json,您可以这样读取它:

    library(jsonlite)
    library(tidyr) # comes in later
    
    j <- fromJSON("mydata.json")
    

    j 中有什么内容?

    names(j)
    
    [1] "error" "msg"   "data" 
    

    data 怎么样?

    str(j$data)
    
    'data.frame':   1 obs. of  3 variables:
     $ country         : chr "Arab World"
     $ code            : chr "ARB"
     $ populationCounts:List of 1
      ..$ :'data.frame':    3 obs. of  2 variables:
      .. ..$ year : int  1960 1961 1962
      .. ..$ value: int  92197753 94724510 97334442
    

    所以j$data 是一个包含 3 列的数据框。最后一个,带有年份和值的是列表列。所以我们可以使用tidyr::unnest()

    j$data %>% 
      unnest(cols = c(populationCounts))
    

    结果:

    # A tibble: 3 × 4
      country    code   year    value
      <chr>      <chr> <int>    <int>
    1 Arab World ARB    1960 92197753
    2 Arab World ARB    1961 94724510
    3 Arab World ARB    1962 97334442
    

    【讨论】:

    • 尼尔,我不能感谢你足够多的人,这非常有效,非常感谢你帮助我这么多!我真的很欣赏它(:
    猜你喜欢
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2020-08-12
    • 2013-08-13
    相关资源
    最近更新 更多