如何在unnest_longer()中正确使用ptype参数转换列表列类型?
解决方法
问题出在你的lst列包含混合类型的列表元素(一个是数值型向量,一个是字符型向量),直接用unnest_longer(ptype = 'character')时,vctrs会先尝试合并原列表中的元素,但数值和字符类型无法直接兼容,导致报错。
可以用两种方式解决:
方法一:先统一列表元素类型,再展开
先把lst列的每个子向量都转成字符型,再执行展开操作:
library(tidyverse) df <- tibble( id = c(1,2), lst = list(c(1,2), c('a', 'b')) ) df %>% mutate(lst = map(lst, as.character)) %>% unnest_longer(lst)
输出结果:
# A tibble: 4 × 2 id lst <dbl> <chr> 1 1 1 2 1 2 3 2 a 4 2 b
方法二:使用transform参数在展开时转换类型
利用unnest_longer的transform参数,在展开过程中直接将每个元素转换为字符型:
df %>% unnest_longer(lst, transform = as.character)
这个方法和方法一效果一致,更简洁。
为什么原方法报错?
ptype参数是用来指定最终输出列的类型,但它要求输入的列表元素本身可以被安全地强制转换并合并。而你的原列表中,数值型向量和字符型向量无法被vctrs自动合并,所以必须先统一每个子元素的类型,或者用transform在展开时逐个转换。
内容的提问来源于stack exchange,提问作者joshbrows
相关产品推荐
相关产品推荐

