如何在R的data.table fread中把带引号的NULL识别为NA
解决思路
方法1:读取后手动替换(最直接稳妥)
先正常读取数据,再把字符列里的"NULL"文本替换成NA:
dt <- data.table::fread(tf1, colClasses = c('character', 'numeric')) dt[cyl == "NULL", cyl := NA_character_]
方法2:精准配置na.strings
当指定colClasses为character时,fread会自动剥离CSV里的引号,实际读到的是不带引号的"NULL"文本。直接把na.strings设为"NULL"即可匹配转换:
dt <- data.table::fread( tf1, colClasses = c('character', 'numeric'), na.strings = "NULL" )
如果遇到引号解析异常,可显式指定quote='"'确保引号被正确处理:
dt <- data.table::fread( tf1, colClasses = c('character', 'numeric'), na.strings = "NULL", quote = '"' )
方法3:从源头避免问题(适用于自己生成的CSV)
如果是你自己生成的CSV文件,在写入前就把要设为缺失值的"NULL"换成NA,这样fread读取时会自动识别为缺失值:
w[3, 'cyl'] <- NA_character_ data.table::fwrite(w, tf1, quote = TRUE) # 读取时无需额外设置 dt <- data.table::fread(tf1, colClasses = c('character', 'numeric'))
内容的提问来源于stack exchange,提问作者Anthony Damico
相关产品推荐
相关产品推荐

