3

我有一个包含测量单位的国际格式数字(即字符串)的文件。在这种情况下,小数位用“,”表示,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]+')

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

非常感谢你!

4

1 回答 1

8

这是一个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. 最后,将逗号转换为句点。
于 2012-11-12T12:55:26.147 回答