R语言tidyverse中嵌套DataFrame类型不兼容的Unnest解决方案求助
解决嵌套tibble展开时类型不兼容的问题
在处理嵌套tibble ex 时,values 列包含的子DataFrame中,value 列同时存在字符型和整数型数据,直接使用 tidyr::unnest 会触发类型合并错误:
Error: ! Can't combine `..1$value` <character> and `..2$value` <integer>.
解决方案
核心思路是先统一嵌套子DataFrame中value列的类型,再执行展开操作:
- 使用
purrr::map遍历values列的每个子DataFrame,将value列转换为字符型 - 再调用
unnest完成展开
完整代码:
library(tidyverse) # 统一子DataFrame中value列的类型为字符型 ex_clean <- ex %>% mutate(values = map(values, ~ mutate(.x, value = as.character(value)))) # 执行unnest展开 ex2 <- ex_clean %>% tidyr::unnest(c(values), .drop = TRUE)
处理后得到的结果:
ex2 # A tibble: 7 x 3 name1 value odd <chr> <chr> <chr> 1 A Home 1.58 2 A Draw 3.75 3 A Away 6.50 4 B 2 7.77 5 B 3 29.34 6 B 1 2.80 7 B 0 1.92
为什么直接用as.character()没生效?
之前的尝试失败是因为没有针对嵌套结构中的每个子DataFrame单独处理value列,直接对values列整体调用as.character()只会把整个列表元素转成字符,无法修改子DataFrame内部列的类型。必须用map逐个遍历子DataFrame,修改对应列的类型后再展开。
内容的提问来源于stack exchange,提问作者user007
相关产品推荐
相关产品推荐

