R + Arrow 10:如何将空字符串转换为数值型NA?
问题:Arrow中空字符串无法转换为数值型NA的解决方法
问题场景
需要将字符串列处理后转换为数值列,但空字符串("")无法被Arrow直接转换为数值型缺失值NA,执行as.numeric()时出现报错:Failed to parse string: '' as a scalar of type double。
解决方案
方法1:先将空字符串替换为NA再转换数值
利用na_if()函数将空字符串替换为字符型NA,再转换为数值型,Arrow会正确识别并转为数值型NA:
data2 <- data |> mutate(x = sub(" -.*", "", x)) |> mutate(x = na_if(x, "")) |> # 把空字符串转为NA mutate(x2 = as.numeric(x)) |> collect()
方法2:使用Arrow的cast()函数并允许无效值转为NA
直接使用Arrow的cast()函数,通过options参数指定将无效解析值转为NA:
data2 <- data |> mutate(x = sub(" -.*", "", x)) |> mutate(x2 = cast(x, double(), options = cast_options(invalid = "null"))) |> collect()
方法3:兼容含空格的空值场景
如果字符串中存在带空格的空值(比如" "),可以先清理首尾空格再替换:
data2 <- data |> mutate(x = str_trim(sub(" -.*", "", x))) |> # 去除首尾空格 mutate(x = na_if(x, "")) |> mutate(x2 = as.numeric(x)) |> collect()
验证结果
执行上述任一方法后,空字符串对应的x2列会被正确转换为数值型NA,不会再出现解析错误。
内容的提问来源于stack exchange,提问作者larry77
相关产品推荐
相关产品推荐

