使用unnest_longer()展开数据框列内列表时遇类型错误的原因
问题:使用
unnest_longer()展开列表列时出现类型不兼容错误的原因 问题背景
尝试用unnest_longer()将数据框中包含列表的fields.species列展开为单独行,执行代码时触发类型不兼容错误。
原始数据获取代码
library(jsonlite) library(tidyverse) datasets.raw <- fromJSON(query, flatten = TRUE, simplifyDataFrame = TRUE) datasets.raw$fields.species datasets.df <- do.call(rbind, datasets.raw) # 转换为数据框
测试数据构造代码
datasets.df <- structure(list(id = c("221", "PXD011681", "PXD013748", "PXD017277", "PXD013449", "PXD017613"), source = c("221", "pride", "pride", "pride", "pride", "pride"), fields.species = list(221L, "Homo Sapiens (human)", c("Passer Hispaniolensis", "Passer Domesticus Domesticus"), "Bifidobacterium Longum Subsp. Longum", "Homo Sapiens (human)", "Homo Sapiens (human)")), row.names = c("hitCount", "entries.1", "entries.2", "entries.3", "entries.4", "entries.5"), class = "data.frame")
执行的展开代码
unpack <- datasets.df %>% unnest_longer(fields.species)
报错信息
! Can't combine `..1$fields.species` <integer> and `..3$fields.species` <character>.
错误原因
这个错误的核心是**fields.species列内的列表元素类型不统一**:
- 第一个列表元素是整数类型(
221L) - 其余列表元素均为字符类型(如物种名称字符串、多物种字符向量)
unnest_longer()在展开列时,会将所有展开后的元素合并为同一类型的向量,但整数与字符类型无法直接合并,因此触发类型不兼容的错误。
额外注意:第一行(行名hitCount)的fields.species值221L看起来是接口返回的总命中数,并非实际物种数据,若这行不属于需要处理的有效条目,可先过滤该行再执行展开操作,也能避免这个类型冲突问题。
内容的提问来源于stack exchange,提问作者Illimar Rekand
相关产品推荐
相关产品推荐

