如何在R中提取JSON组件转为data.frame并解决写入CSV报错?
解决JSON列表转data.frame后无法写入CSV的问题
问题原因
你遇到的unimplemented type 'list' in 'EncodeElement'错误,是因为转换后的data.frame里存在list类型的列。看你的数据,第一个元素的EndDate是NULL,而其他元素的EndDate是字符型,用do.call(rbind, ...)合并时,R会把这个列保留为list类型(混合了NULL和字符值),而write.csv无法处理list类型的列。
简单解决方法
方法1:用dplyr的bind_rows自动处理NULL
bind_rows会自动将NULL转换为NA,同时统一列的类型:
library(dplyr) xx <- bind_rows(dh[1:3]) write.csv(xx, file="abc.csv")
方法2:用data.table的rbindlist
rbindlist的fill=TRUE参数也能完美处理这种混合NULL的情况:
library(data.table) xx <- rbindlist(dh[1:3], fill=TRUE) # 如需转成普通data.frame xx <- as.data.frame(xx) write.csv(xx, file="abc.csv")
方法3:手动清理NULL再合并
如果不想加载额外包,可以先把每个子列表里的NULL替换成NA,再合并:
# 定义清理函数,把NULL转成NA clean_sub_list <- function(sub_list) { lapply(sub_list, function(val) if (is.null(val)) NA_character_ else val) } # 清理目标列表 dh_clean <- lapply(dh[1:3], clean_sub_list) # 合并成data.frame xx <- as.data.frame(do.call(rbind, dh_clean)) write.csv(xx, file="abc.csv")
内容的提问来源于stack exchange,提问作者ivo Welch
相关产品推荐
相关产品推荐

