将国际格式的字符串转换为数字

Seb*_*Seb 2 r

我有一个国际格式化数字(即字符串)的文件,包括测量单位.在这种情况下,小数位用","表示,1e3分隔符用"."表示.(即德国数字格式).

a <- c('2.200.222   €',
       '  180.109,3 €')
Run Code Online (Sandbox Code Playgroud)

要么

b <- c('28,42 m²',
       '47,70 m²')
Run Code Online (Sandbox Code Playgroud)

我想有效地将​​这些字符串转换为numeric.我试图用代码过滤掉数字

require(stringr)
str_extract(a, pattern='[0-9]+.[0-9]+.[0-9]+')
str_extract(b, pattern='[0-9]+,[0-9]+')
Run Code Online (Sandbox Code Playgroud)

然而,这似乎太容易出错,我想必须有一种更标准化的方式.所以这是我的问题:是否有自定义函数,包或其他能够解决这个问题的东西?

非常感谢你!

And*_*rie 5

这是一个gsub用于处理您发布的样本数据的函数:

x <- c('2.200.222   €', '  180.109,3 €', '28,42 m²', '47,70 m²')

strip <- function(x){
  z <- gsub("[^0-9,.]", "", x)
  z <- gsub("\\.", "", z)
  gsub(",", ".", z)
}

as.numeric(strip(x))
[1] 2200222.00  180109.30      28.42      47.70
Run Code Online (Sandbox Code Playgroud)

它的工作原理如下:

  1. 首先删除所有尾随的非数字(以及这些非数字之后的任何内容)
  2. 然后去掉所有时期.
  3. 最后,将逗号转换为句点.

  • 你的第一个正则表达式只需要是""[^ 0-9,.] +"` (2认同)