解析字符串向量中的德国数字

时间:2016-11-26 16:38:08

标签: r parsing readr tidyverse

有一个字符串如下:

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

1 个答案:

答案 0 :(得分:2)

这个单行程序不使用包,也不使用复杂的正则表达式。它假定有效元素有逗号而有效元素没有。这适用于显示的示例输入,但如果不在您的实际数据中,则只需在grepl中使用更复杂的正则表达式,基于该标准。

as.numeric(ifelse(grepl(",", x), chartr(",", ".", gsub(".", "", x, fixed = TRUE)), NA))
## [1]       NA       NA 23753.38     0.00