2012-11-12 38 views
2

我有一個包含國際格式數字(即字符串)的文件,其中包括測量單位。在這種情況下,小數位用「,」表示,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]+') 

但是過濾掉的數字,這似乎太容易出錯,我想必須有一個更加規範的方式。所以這裏是我的問題:是否有一個自定義函數,包或其他能夠解決這個問題的東西?

非常感謝!

+0

你可能會討論一些你看到的錯誤嗎? –

+0

其實我不確定如何指定正則表達式。例如,「[0-9] +。[0-9] +。[0-9] +,[0-9] +」對於所有情況都可以嗎?例如對於像'c('23,3')'這樣的數字與'c'('12l.120.222.23,3')'相比,實際上我想知道一般情況下是否存在這種情況的函數。謝謝! – Seb

+1

'taRifx :: destring'就像你想要的一樣。 –

回答

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. 最後,將逗號轉換爲句點。
+2

你的第一個正則表達式只需要''[^ 0-9,。] +「' – hadley

+0

@hadley所以它的確如此,謝謝。 – Andrie

+0

另外,您不需要在第3個正則表達式中替換中的'.'。 – hadley

相關問題