如何在R Arrow中将含字符的数值列转为数值型并将非数值转为NA
解决Arrow包转换混合类型列为数值型时的报错问题
当使用Arrow的cast()函数转换包含非数值字符的列时,因其严格的转换规则会直接报错,若要将无法解析的字符转为NA且不中断流程,可采用以下两种方法:
方法一:使用parse_double()函数
Arrow提供的parse_double()函数专门用于将字符串解析为双精度数值,遇到无法解析的内容会自动转为NA,不会抛出错误:
library(arrow) library(tidyverse) mtcars$cyl[2:5] = 'a' mtcars %>% arrow_table() %>% mutate(cyl = parse_double(cyl)) %>% collect()
方法二:使用try_cast()函数(Arrow 13.0+)
若你的Arrow版本在13.0及以上,可使用try_cast()函数,并通过on_error = "null"参数指定转换失败时返回NA:
mtcars %>% arrow_table() %>% mutate(cyl = try_cast(cyl, numeric(), on_error = "null")) %>% collect()
补充说明
原生R的as.numeric()属于宽松转换,会自动将非数值内容转为NA,但Arrow的cast()是严格转换,要求所有输入都能成功转换,因此需要使用上述容错型转换函数来匹配R原生的行为。
内容的提问来源于stack exchange,提问作者doraemon
相关产品推荐
相关产品推荐

