R语言:将ClinicalTrials.gov API返回数据的列表列转为字符串
解决ClinicalTrials.gov API数据列类型转换问题
问题原因
从ClinicalTrials.gov API返回的字段中,部分字段(如Condition)可能对应多个值,因此被解析为列表类型。直接使用unnest会展开这些列表元素,导致行数变化(比如多值字段会拆分出多行,空列表字段会过滤掉对应行),这不符合保留每行对应一个研究的需求。
解决方案:将列表列转为字符串(保留单行结构)
通过拼接列表元素为单个字符串的方式,可把所有列表列转为字符型,同时保持每行对应一个研究的结构。以下是两种实现方式:
方式1:Base R实现
# 遍历所有列,将列表元素用逗号拼接为字符串 for (col in names(studylist)) { studylist[[col]] <- sapply(studylist[[col]], function(x) paste(x, collapse = ", ")) } # 可选:将数值型字段转为数值类型(如EnrollmentCount) studylist$EnrollmentCount <- as.double(studylist$EnrollmentCount)
方式2:dplyr + purrr 简洁实现
library(dplyr) library(purrr) studylist_clean <- studylist %>% # 对字符类字段:拼接列表元素为字符串 mutate(across(c(NCTId, Condition, OfficialTitle, Phase, StartDate), ~map_chr(., ~paste(.x, collapse = ", ")))) %>% # 对数值类字段:转为数值型(空值设为NA) mutate(EnrollmentCount = map_dbl(EnrollmentCount, ~ifelse(length(.x) == 0, NA_real_, as.double(.x))))
效果说明
处理后所有列都会转为字符型(或指定的数值型),每行仍对应一个研究,行数保持为预期的10行。如果某个字段有多个值(比如一个研究对应多种病症),会用逗号分隔合并为单个字符串。
内容的提问来源于stack exchange,提问作者Ashok G
相关产品推荐
相关产品推荐

