You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中如何将FHIR嵌套JSON转换为结构化DataFrame?

解决FHIR QuestionnaireResponse JSON转每行对应参与者的DataFrame问题

先加载所需R包

library(jsonlite)
library(dplyr)
library(tidyr)

完整处理代码

# 解析JSON数据
parsed_json <- fromJSON(json_data, simplifyDataFrame = FALSE)

# 提取所有页面下的问题项,扁平化嵌套结构
questions <- unlist(lapply(parsed_json$item, function(page) page$item), recursive = FALSE)

# 逐个处理每个问题,生成带参与者索引的长表
processed_data <- lapply(questions, function(q) {
  # 提取问题的标识和文本
  link_id <- q$linkId
  text <- q$text
  
  # 提取每个参与者的答案,同时添加参与者序号(1、2对应两位参与者)
  answers <- tibble(
    participant = 1:length(q$answer),
    value = sapply(q$answer, function(a) unlist(a))
  )
  
  # 关联问题信息
  answers %>%
    mutate(linkId = link_id, text = text)
}) %>%
  bind_rows()

# 转换为目标宽表:每行对应一位参与者,每列对应一个问题的答案
final_df <- processed_data %>%
  pivot_wider(
    id_cols = participant,
    names_from = c(linkId, text),
    values_from = value,
    names_sep = ": "
  ) %>%
  # 修复数据类型(根据原始答案的类型转换)
  mutate(
    `1.2: Quel est votre âge?` = as.integer(`1.2: Quel est votre âge?`),
    `2.2: Nombre dannées dexpérience?` = as.integer(`2.2: Nombre dannées dexpérience?`),
    `2.3: Êtes-vous heureux?` = as.logical(`2.3: Êtes-vous heureux?`)
  )

为什么你的原始方法失效?

你之前直接多次使用unnest_wider会打乱数据关联:每个问题的answer是对应两位参与者的列表,直接unnest会把不同问题的答案拆成独立行,无法保证同一参与者的不同问题答案能对应起来,最终得到的是混乱的冗余数据。

最终结果示例

运行上述代码后,final_df会输出符合需求的结构:

# A tibble: 2 × 6
  participant `1.1: Quel est votre nom?` `1.2: Quel est votre âge?` `1.3: Quel est votre lieu de résidence?` `2.2: Nombre dannées dexpérience?` `2.3: Êtes-vous heureux?`
        <int> <chr>                                      <int> <chr>                                                                 <int> <lgl>                   
1           1 Participant 1                                30 Ville A                                                                   5 TRUE                    
2           2 Participant 2                                25 Ville B                                                                   2 FALSE                   

内容的提问来源于stack exchange,提问作者Akram HECINI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 18:53:11