R语言导入含多余头尾行的CSV银行对账单转double遇NA如何解决
问题原因
你的AMOUNT列原始值为带="前缀和"后缀的特殊字符格式(例如="17.58"),不属于标准数字格式,直接使用col_double()解析时无法识别非数字字符,因此全部返回NA。
解决方法
推荐优先使用「先读为字符、再清洗转换」的方案,逻辑简单且容错性更高:
- 先按原有逻辑读取数据,保留
AMOUNT列为字符型 - 提取字符中的数字部分,再转换为double类型
示例代码如下:
library(readr) library(dplyr) library(stringr) # 读取数据 df <- read_csv( files[1], skip = 7, col_types = cols_only( AMOUNT = col_character(), `BILL REF NO.` = col_character() ) ) # 清洗转换AMOUNT列 df <- df %>% mutate( # 提取数字+小数点组合,再转为双精度数值 AMOUNT = str_extract(AMOUNT, "\\d+\\.\\d+") %>% as.double() )
如果希望在读入阶段完成转换,也可以自定义列解析规则:
df <- read_csv( files[1], skip = 7, col_types = cols_only( AMOUNT = col_number(transform = function(x) str_remove_all(x, '[="]')), `BILL REF NO.` = col_character() ) )
内容的提问来源于stack exchange,提问作者Ong K.S
相关产品推荐
相关产品推荐

