在R语言中移除数字逗号:因子转数值异常问题求助
解决Excel带千位分隔符数值导入R后转数值异常的问题
我太懂这个坑了!带逗号的数值从Excel导进R后变成因子,直接转数值还出乱码,其实是因为没搞对因子转数值的正确步骤,我给你几个实用的解决办法:
方法1:从导入源头就避免变成因子(最推荐)
如果还没导入数据,直接用能自动识别千位分隔符的工具:
- 用
readxl包专门处理Excel文件:
这个包对Excel的数值格式兼容性特别好,带千位分隔符的数值会直接识别成数值型,根本不会变成因子:library(readxl) # 直接导入,不用额外设置,大部分情况能自动识别 mydata <- read_excel("你的Excel文件路径.xlsx") # 要是担心识别错,也可以手动指定列类型 mydata <- read_excel("你的Excel文件路径.xlsx", col_types = c("numeric", "numeric")) - 用
readr包的read_csv(如果是CSV格式):
tidyverse系列的readr对这类格式处理很智能,默认不会把文本转成因子,还能自动解析带逗号的数值:library(readr) mydata <- read_csv("你的CSV文件路径.csv")
方法2:已经导入成因子了?这样修复
如果数据已经是因子类型,绝对不能直接用as.numeric()——因为因子的底层是整数索引,直接转数值会拿到它在因子水平里的位置,而不是你看到的数值内容。正确步骤是:先把因子转成字符,去掉逗号,再转数值:
# 修复x1列 mydata$x1 <- as.numeric(gsub(",", "", as.character(mydata$x1))) # 同理处理另一列x2 mydata$x2 <- as.numeric(gsub(",", "", as.character(mydata$x2)))
举个例子:如果你的因子值是"8,180",先转成字符就是"8,180",用gsub(",", "", ...)去掉逗号变成"8180",最后转成数值就是8180,完美解决之前变0的问题。
方法3:基础包的补救方案
要是你不想装新包,用R基础包也能搞定:
先导入时关闭自动转因子的设置,再清理逗号转数值:
# 导入时设置stringsAsFactors=FALSE,让带逗号的数值变成字符型而不是因子 mydata <- read.csv("你的文件.csv", stringsAsFactors = FALSE) # 清理逗号并转数值 mydata$x1 <- as.numeric(gsub(",", "", mydata$x1))
内容的提问来源于stack exchange,提问作者Naim
相关产品推荐
相关产品推荐

