将嵌套 JSON 转换为 R 中的 DataFrame?

问题描述 投票:0回答:1

我目前正在开发一个项目,需要使用 R 将嵌套 JSON 结构转换为 DataFrame。我在当前方法中遇到一些问题,如果您能提供有关如何正确处理此问题的帮助或指导,我将不胜感激转换。

Json 文件如下所示:

json_data <- '{
  "resourceType": "QuestionnaireResponse",
  "id": "example-questionnaireresponse",
  "questionnaire": "Questionnaire/example",
  "status": "completed",
  "subject": {
    "reference": "Patient/example"
  },
  "authored": "2023-12-19T12:00:00Z",
  "source": {
    "reference": "Patient/example"
  },
  "item": [
    {
      "linkId": "page1",
      "text": "Page 1",
      "item": [
        {
          "linkId": "1.1",
          "text": "Quel est votre nom?",
          "answer": [
            {
              "valueString": "Participant 1"
            },
            {
              "valueString": "Participant 2"
            }
          ]
        },
        {
          "linkId": "1.2",
          "text": "Quel est votre âge?",
          "answer": [
            {
              "valueInteger": 30
            },
            {
              "valueInteger": 25
            }
          ]
        },
        {
          "linkId": "1.3",
          "text": "Quel est votre lieu de résidence?",
          "answer": [
            {
              "valueString": "Ville A"
            },
            {
              "valueString": "Ville B"
            }
          ]
        }
      ]
    },
    {
      "linkId": "page2",
      "text": "Page 2",
      "item": [
        {
          "linkId": "2.2",
          "text": "Nombre dannées dexpérience?",
          "answer": [
            {
              "valueInteger": 5
            },
            {
              "valueInteger": 2
            }
          ]
        },
        {
          "linkId": "2.3",
          "text": "Êtes-vous heureux?",
          "answer": [
            {
              "valueBoolean": true
            },
            {
              "valueBoolean": false
            }
          ]
        }
      ]
    }
  ]
}'

json文件是两个参与者对问卷的回答!我想要一个数据框,其中每行包含参与者的响应,而一列包含对特定问题的响应。

我的方法:

df <- fromJSON(json_data) %>%
  as_tibble() %>%
  unnest_wider(item) %>%
  unnest_wider(item) %>%
  unnest_wider(answer) %>%
  select(linkId, text, valueString, valueInteger, valueBoolean)

这显然不起作用..

如何将 FHIR json 文件结构转换为数据帧?一个未嵌套的数据框。

r json tidyverse
1个回答
0
投票
library(tidyverse)

jsonlite::fromJSON(json_data) %>%  
  pluck("item", "item") %>% 
  map_dfr(~ .x %>% 
            mutate(across(answer, ~ map(.x, ~ as.character(pull(.x, 1))))) %>% 
            unnest_wider(answer, names_sep = "_"))

# A tibble: 5 x 4
  linkId text                              answer_1      answer_2     
  <chr>  <chr>                             <chr>         <chr>        
1 1.1    Quel est votre nom?               Participant 1 Participant 2
2 1.2    Quel est votre bge?               30            25           
3 1.3    Quel est votre lieu de risidence? Ville A       Ville B      
4 2.2    Nombre dannies dexpirience?       5             2            
5 2.3    Jtes-vous heureux?                TRUE          FALSE       
© www.soinside.com 2019 - 2024. All rights reserved.