如何修改readr::type_convert将空文本列设为字符类型而非逻辑类型?
解决readr::type_convert全空列默认识别为逻辑型的问题
要让readr::type_convert()把全空文本列识别为col_character()而非默认的col_logical(),可以通过自定义类型推断函数替换默认的类型猜测逻辑,具体步骤如下:
- 编写自定义的类型推断函数
基于readr自带的guess_parser(),增加对全空列的判断:当列中所有元素都是空字符串时,强制返回"character"类型,其余情况沿用默认推断逻辑。
library(readr) my_guess_parser <- function(x, locale = default_locale()) { # 检查是否所有元素都是空字符串 if (all(x == "")) { return("character") } # 其他情况使用默认的类型推断 readr::guess_parser(x, locale = locale) }
- 在
type_convert()中使用自定义函数
调用type_convert()时,通过guess参数传入上面定义的my_guess_parser:
# 测试数据 test_df <- data.frame(a = c("", ""), b = c("", "a")) # 应用自定义推断逻辑 str(readr::type_convert(test_df, guess = my_guess_parser))
运行后输出的结果会符合预期:
cols( a = col_character(), b = col_character() ) 'data.frame': 2 obs. of 2 variables: $ a: chr "" "" $ b: chr "" "a"
如果你的数据中同时存在NA值和空字符串,可以调整判断条件为all(is.na(x) | x == ""),确保全空/全NA的列都被识别为字符型。
内容的提问来源于stack exchange,提问作者hbelbo
相关产品推荐
相关产品推荐

