在字符串向量中解析德国数字
parsing german numbers within string-vector
有一个字符串如下:
x <- c("31.12.2009EUR", "31.12.2009", "23.753,38", "0,00")
我想将其解析为
c(NA, NA, 23753.38, 0.00)
我试过了:
require(readr)
parse_number(x, locale=locale(decimal_mark = ",")) # This ignores the grouping_mark
#> 31122009.00 31122009.00 23753.38 0.00
parse_double(x, locale=locale(decimal_mark = ","))
#> NA NA NA 0
我想出的唯一方法:
out <- rep(NA, length(x))
ind <- grep("^[0-9]{1,3}(\.[0-9]{3})*\,[0-9]{2}", x)
out[ind] <- parse_number(x[ind],locale=locale(decimal_mark = ","))
out
这一行不使用包,也不使用复杂的正则表达式。它假定有效元素有一个逗号,而无效元素没有。这适用于显示的示例输入,但如果不是在您的真实数据中,请根据任何标准在 grepl
中使用更复杂的正则表达式。
as.numeric(ifelse(grepl(",", x), chartr(",", ".", gsub(".", "", x, fixed = TRUE)), NA))
## [1] NA NA 23753.38 0.00
有一个字符串如下:
x <- c("31.12.2009EUR", "31.12.2009", "23.753,38", "0,00")
我想将其解析为
c(NA, NA, 23753.38, 0.00)
我试过了:
require(readr)
parse_number(x, locale=locale(decimal_mark = ",")) # This ignores the grouping_mark
#> 31122009.00 31122009.00 23753.38 0.00
parse_double(x, locale=locale(decimal_mark = ","))
#> NA NA NA 0
我想出的唯一方法:
out <- rep(NA, length(x))
ind <- grep("^[0-9]{1,3}(\.[0-9]{3})*\,[0-9]{2}", x)
out[ind] <- parse_number(x[ind],locale=locale(decimal_mark = ","))
out
这一行不使用包,也不使用复杂的正则表达式。它假定有效元素有一个逗号,而无效元素没有。这适用于显示的示例输入,但如果不是在您的真实数据中,请根据任何标准在 grepl
中使用更复杂的正则表达式。
as.numeric(ifelse(grepl(",", x), chartr(",", ".", gsub(".", "", x, fixed = TRUE)), NA))
## [1] NA NA 23753.38 0.00