如何识别在 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"
待办事项:十进制数字应以逗号分隔(并非总是如此)。数字中的空格应替换为点(但要小心,因为空格也会分隔数字)。
我很乐意提供任何帮助!
您可以使用 gsub
和 strsplit
假设原始 .
永远不会在 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"
我有一个扫描文档,在 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"
待办事项:十进制数字应以逗号分隔(并非总是如此)。数字中的空格应替换为点(但要小心,因为空格也会分隔数字)。
我很乐意提供任何帮助!
您可以使用 gsub
和 strsplit
假设原始 .
永远不会在 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"