【问题标题】:Extract values from JSON complex object从 JSON 复杂对象中提取值
【发布时间】:2021-02-18 08:54:08
【问题描述】:

我有一个如下所示的 json 文件。我想将数据提取到 R 数据框中,如下所示。请参阅 json 对象,其中包含各种日期的值列表。我想将这些值提取到数据框中。你能帮忙看看我应该如何构建这个吗?

输出数据帧

Jan-18 a 5
Jan-18 b 0
Jan-18 c 9
Jan-18 d 0
Jan-18 e 5
Jan-19 a 4
Jan-19 b 0
Jan-19 c 26
Jan-19 d 0
Jan-19 e 35

value_headers = ['a', 'b', 'c', 'd', 'e']

输入 JSON 内容:

{
    "default": {
        "timelineData": [
            {
                "time": "1610928000",
                "formattedTime": "Jan 18, 2021",
                "formattedAxisTime": "Jan 18",
                "value": [
                    5,
                    0,
                    9,
                    0,
                    5
                ],
                "hasData": [
                    true,
                    false,
                    true,
                    false,
                    true
                ],
                "formattedValue": [
                    "5",
                    "0",
                    "9",
                    "0",
                    "5"
                ]
            },
            {
                "time": "1611014400",
                "formattedTime": "Jan 19, 2021",
                "formattedAxisTime": "Jan 19",
                "value": [
                    4,
                    0,
                    26,
                    0,
                    35
                ],
                "hasData": [
                    true,
                    false,
                    true,
                    false,
                    true
                ],
                "formattedValue": [
                    "4",
                    "0",
                    "26",
                    "0",
                    "35"
                ]
            }
        ],
        "averages": [
            5,
            1,
            34,
            25,
            25
        ]
    }
}

【问题讨论】:

    标签: r json


    【解决方案1】:

    使用 tidyverse 可能是这样的:

    library(jsonlite)
    library(tidyverse)
    
    json_dt <- fromJSON('{
        "default": {
            "timelineData": [
                {
                    "time": "1610928000",
                    "formattedTime": "Jan 18, 2021",
                    "formattedAxisTime": "Jan 18",
                    "value": [
                        5,
                        0,
                        9,
                        0,
                        5
                    ],
                    "hasData": [
                        true,
                        false,
                        true,
                        false,
                        true
                    ],
                    "formattedValue": [
                        "5",
                        "0",
                        "9",
                        "0",
                        "5"
                    ]
                },
                {
                    "time": "1611014400",
                    "formattedTime": "Jan 19, 2021",
                    "formattedAxisTime": "Jan 19",
                    "value": [
                        4,
                        0,
                        26,
                        0,
                        35
                    ],
                    "hasData": [
                        true,
                        false,
                        true,
                        false,
                        true
                    ],
                    "formattedValue": [
                        "4",
                        "0",
                        "26",
                        "0",
                        "35"
                    ]
                }
            ],
            "averages": [
                5,
                1,
                34,
                25,
                25
            ]
        }
    }')
    
    tibble(
      time = json_dt$default$timelineData$formattedTime,
      value = json_dt$default$timelineData$formattedValue
    ) %>%
      unnest(value) %>%
      group_by(time) %>%
      mutate(
        letter = letters[1:n()],
        value = as.integer(value),
        time = str_replace(time, ",.*", ""),
        time = str_replace(time, " ", "-")
      )
    

    【讨论】:

      猜你喜欢
      • 2016-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-13
      • 1970-01-01
      • 2019-12-12
      • 2023-04-04
      相关资源
      最近更新 更多