使用bind_rows合并含hash类型列的数据框时出错的解决咨询
解决bind_rows合并含hash类型列的数据框时的类型冲突问题
问题重现
你尝试合并两个数据框,其中一个包含hash类型的x列,另一个缺少该列,执行bind_rows时报错:
library(tidyverse) library(openssl) df <- data.frame(x = sha3(letters[1:3], size = 512), y = 1:3) df2 <- data.frame(y = 4:6) # 执行后报错 df |> bind_rows(df2)
错误信息:
Error in `bind_rows()`: ! Can't combine `..1` <hash> and `..2` <vctrs:::common_class_fallback>. Run `rlang::last_trace()` to see where the error occurred.
替代解决方案
除了将hash列转为字符型的方法,还有以下两种可行方案:
方案1:手动为缺失列添加同类型的NA值
给df2添加类型为hash的x列,用hash(NA)生成对应类型的缺失值,让两个数据框的列类型统一:
df2$x <- hash(NA) df |> bind_rows(df2)
方案2:使用data.table的rbindlist函数
data.table的rbindlist自带fill=TRUE参数,能自动处理列缺失和类型兼容问题,无需手动调整列类型:
library(data.table) rbindlist(list(df, df2), fill = TRUE)
内容的提问来源于stack exchange,提问作者deschen
相关产品推荐
相关产品推荐

