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

时间:2012-11-12 12:26:18

标签: r

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

a <- c('2.200.222   €',
       '  180.109,3 €')

b <- c('28,42 m²',
       '47,70 m²')

我想将这些字符串有效地转换为numeric。我试图通过像

这样的代码过滤掉数字
require(stringr)
str_extract(a, pattern='[0-9]+.[0-9]+.[0-9]+')
str_extract(b, pattern='[0-9]+,[0-9]+')
然而,这似乎太容易出错,我想必须有更标准化的方法。所以这是我的问题:是否有自定义函数,包或其他能够解决这个问题的东西?

非常感谢!

1 个答案:

答案 0 :(得分: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

它的工作原理如下:

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