R语言使用gsub移除列中$符号时强制转换引入NA问题
问题原因
你的猜测是正确的,NA就是数值里的千位分隔符逗号导致的:as.numeric()只能识别纯数字+小数点组成的字符串为合法数值格式,你仅移除了$符号后,$1,056.2变成了"1,056.2",里面的逗号不属于数值可识别字符,转换时就会被强制转为NA,同时抛出「NAs introduced by coercion」的提示。
修复方案
方案1:修改正则同时替换$和逗号
调整gsub的匹配规则,同时匹配并移除$和,两种无效字符:
data_Selected$new = as.numeric(gsub("[$,]", "", data_Selected$Strata.Maint.Fee))
正则中[$,]为字符集匹配规则,会匹配字符串中出现的任意一个$或,字符,替换后得到的纯数字字符串即可正常转换为数值格式。
方案2:使用专门的数值解析函数(更省心)
如果经常处理带货币符号、千位分隔符的金额类数据,可以使用readr包的parse_number()函数,它会自动识别并忽略数值前后的非数字符号、千位分隔符,无需手动写正则:
library(readr) data_Selected$new = parse_number(data_Selected$Strata.Maint.Fee)
两种方案处理后,原$1,056.2都会被正确转换为数值1056.2,不会再生成NA。
内容的提问来源于stack exchange,提问作者Yellow_truffle
相关产品推荐
相关产品推荐

