使用R语言移除CSV导入数据千位分隔空格失败求助
问题与解决方案:CSV导入后无法移除数字中的千位分隔空格
问题详情
从CSV导入的数据中,V8列前10条数据如下:
print(donnees_ventes3$V8[1:10]) [1] "0,00000" "0,00000" "0,00000" "0,00000" "0,00000" "0,00000" "4,22476" "0,00000" "1 086,16998" "0,00000"
已成功将逗号替换为小数点,但千位与百位间的空格无法通过常规方法移除。尝试过的操作包括:
gsub(" ", "", donnees_ventes3$V8) gsub(" ", "\\\\", donnees_ventes3$V8) gsub("\\ ", "\\\\", donnees_ventes3$V8) gsub("\\ ", "", donnees_ventes3$V8) gsub("\\ ", "\\\\", donnees_ventes3$V8) # 曾以为是两个空格
以及stringr包的替换方法:
str_replace_all(donnees_ventes3$V8,” “, “”)
自行创建测试向量:
exemple <- c("0,00000", "0,00000", "0,00000", "0,00000", "0,00000", "0,00000", "4,22476", "0,00000", "1 086,16998", "0,00000")
使用gsub(" ", "", exemple)可成功将第9个数据改为"1086,16998",说明问题出在CSV导入环节的空格格式上。导入代码为:
read.csv("csv path", encoding="UTF-8", header=FALSE)
解决方案
1. 匹配所有空白字符
CSV中的千位分隔符可能不是普通半角空格,而是全角空格、非断空格(NBSP,Unicode U+00A0)等特殊空白字符。用正则匹配所有空白类字符即可替换:
# 替换所有空白字符 donnees_ventes3$V8 <- gsub("\\s", "", donnees_ventes3$V8) # 若确定是NBSP,直接指定编码替换 donnees_ventes3$V8 <- gsub("\u00A0", "", donnees_ventes3$V8)
2. 导入时直接处理数字格式
无需事后替换,导入时直接指定小数分隔符和千位分隔符,将列转为数值型:
donnees_ventes3 <- read.csv( "csv path", encoding="UTF-8", header=FALSE, dec = ",", # 指定小数分隔符为逗号 thousands = " " # 指定千位分隔符为空格 )
此方法导入后V8列直接为数值类型,省去后续格式处理步骤。
3. 排查空白字符类型
若不确定空格类型,可查看其Unicode编码确认:
# 提取含问题空格的元素 problem_str <- donnees_ventes3$V8[9] # 输出每个字符的Unicode编码 utf8ToInt(problem_str)
根据输出编码对应替换即可(如编码160对应NBSP)。
内容的提问来源于stack exchange,提问作者Felixbacon
相关产品推荐
相关产品推荐

