使用 gsub( " ", "", chr) 将 " " 空格替换为 "" Nothing

问题描述 投票:0回答:1

这是我的数据格式,从 CSV 导入。

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)` #thought there might be two space. 

还尝试过:

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)

可能是编码问题?

有人知道这里出了什么问题吗?

r encoding gsub read.csv
1个回答
0
投票

有时数据包含打印起来像空格但实际上不是空格的字符,例如 No-Break Space (NBSP),即

\U00A0

space  <- "This is a space"
not_space  <- "This\U00A0is\U00A0not"
print(space) # [1] "This is a space"
print(not_space) # [1] "This is not"

您不能使用

"\\s"
来替换这些字符:

gsub("\\s", "", not_space)
# [1] "This is not"

您可以使用

stringr::str_view()
轻松查看这些字符:

stringr::str_view(space) 
# [1] │ This is a space
stringr::str_view(not_space) 
# [1] │ This{\u00a0}is{\u00a0}not

一旦知道其字符代码,您就可以将其删除:

gsub("\U00A0", "", not_space)
# [1] "Thisisnot"

或者,根据您的最终目标,您可能希望删除所有非数字字符:

v  <- c("1\U{00A0}086,16998", "1\U{00A0}086,16998")
print(v) # [1] "1 086,16998"
gsub("\\D+", "", v)
# [1] "108616998" "108616998"

或者,如果您尝试删除空格并将逗号更改为小数点,您可以删除所有不是数字和逗号的字符,然后替换逗号:

v |>
    gsub("[^0-9,]", "", x=_) |>
    gsub(",", ".", x=_)
# [1] "1086.16998" "1086.16998"
© www.soinside.com 2019 - 2024. All rights reserved.