如何识别在 R 中的字符串中混淆的数字?

How can I identify numbers which are mixed up in a string in R?

我有一个扫描文档,在 OCR 之后我遇到了多个问题,结果数字格式错误。

x <- c("9 243,51 233 286,08 18 386.21") 要么 x <- c("9.243,51 233 286,08 18 386.21")

期望的结果是: "9.244,51" "233.286,08" "18.386,21"

待办事项:十进制数字应以逗号分隔(并非总是如此)。数字中的空格应替换为点(但要小心,因为空格也会分隔数字)。

我很乐意提供任何帮助!

您可以使用 gsubstrsplit 假设原始 . 永远不会在 OCR 中并且所有数字都有一个可识别的数字 ,..

. <- gsub("\.", ",", x)
. <- gsub("(,\d+) +", "\1:", .)
. <- gsub(" +", ".", .)
strsplit(., ":")[[1]]
#[1] "9.243,51"   "233.286,08" "18.386,21"

或假设逗号后有两位数字:

. <- gsub("[.,](\d{2}\b)", ",\1", x)
. <- gsub("(,\d{2}) +", "\1:", .)
. <- gsub(" +", ".", .)
strsplit(., ":")[[1]]
#[1] "9.243,51"   "233.286,08" "18.386,21" 

或者:

. <- trimws(strsplit(x, "(?<=[.,](\d{2}\b))", perl=TRUE)[[1]])
. <- gsub("\.(?=\d{2}$)", ",", ., perl=TRUE)
gsub("(?<=\d) +(?=\d{3})", ".", ., perl=TRUE)
#[1] "9.243,51"   "233.286,08" "18.386,21"