R语言字符串转数值求助:含千分位逗号数据转后出现NA
解决含千分位逗号的字符型数值转数值型时出现NA的问题
出现NA的核心原因是那些看似正常的字符串里藏着非标准字符(比如前后空格、全角逗号、不可见控制字符),只删逗号没法彻底清理。试试这些实用方法:
暴力清理法:只保留数字
直接把所有非数字的字符全部删掉,再转数值,不管中间藏了啥都能清掉:deaths_num <- as.numeric(gsub("[^0-9]", "", nim$deaths))分步清理法:先去空格再删逗号
先去掉字符串前后的空格,再清理中间可能的空格,最后删逗号:# 先去前后空格,再删中间空格和逗号 cleaned_deaths <- gsub(",", "", gsub(" ", "", trimws(nim$deaths, which = "both"))) deaths_num <- as.numeric(cleaned_deaths)懒人省心法:用readr包的parse_number
parse_number函数会自动识别并忽略千分位分隔符、空格等干扰字符,直接提取数值,堪称这类场景的神器:library(readr) deaths_num <- parse_number(nim$deaths)排查问题根源(可选)
要是想搞清楚到底藏了啥异常字符,挑一个转成NA的字符串,用下面的代码看它的ASCII编码:# 取第一个转成NA的原字符串 problematic_str <- nim$deaths[which(is.na(deaths_num))[1]] # 输出每个字符的十六进制编码 cat(charToRaw(problematic_str))正常的"1,472"会输出
31 2c 34 37 32,要是有其他编码,就对应着异常字符。
内容的提问来源于stack exchange,提问作者Melis K
相关产品推荐
相关产品推荐

