2013-02-05 107 views
1

我已經從網絡服務器上下載了一些數據,包括格式化爲人類的價格,包括$和千分隔符。

> head(m) 
[1] $129,900 $139,900 $254,000 $260,000 $290,000 $295,000 

我能夠擺脫逗號,使用

m <- sub(',','',m) 

m <- sub('$','',m) 

不會刪除美元符號。如果我嘗試mn <- as.numeric(m)或as.integer我得到一個錯誤信息:

警告消息:來港受到脅迫

介紹,其結果是:

> head(m) 
[1] NA NA NA NA NA NA 

我如何刪除$符號?由於

回答

7
dat <- gsub('[$]','',dat) 
dat <- as.numeric(gsub(',','',dat)) 
> dat 
[1] 129900 139900 254000 260000 290000 295000 

在一個步驟

gsub('[$]([0-9]+)[,]([0-9]+)','\\1\\2',dat) 
[1] "129900" "139900" "254000" "260000" "290000" "295000" 
+0

是的,效果很好,謝謝! 'm < - data.frame(gsub('[$]','',m))' – koenbro

+4

使用'gsub(「[$,]」,「」,dat)'作爲正則表達式應該在一個步驟中完成 – Dason

+0

謝謝Dason,這更簡單! – koenbro

6

試試這個。這意味着更換任何不與空字符串一個數字:

as.numeric(gsub("\\D", "", dat)) 

或刪除任何東西,既不是一個數字也不是一個小數:

as.numeric(gsub("[^0-9.]", "", dat)) 

更新:增加的情況下,第二個類似的方法問題中的數據不具代表性。

+3

要小心,如果你的數字有小數,因爲這會消除小數點。 – Dason

3

你也可以使用:

x <- c("$129,900", "$139,900", "$254,000", "$260,000", "$290,000", "$295,000") 

library(qdap) 
as.numeric(mgsub(c("$", ","), "", x)) 

產生:

> as.numeric(mgsub(c("$", ","), "", x)) 
[1] 129900 139900 254000 260000 290000 295000 

如果你想留在基地使用fixed = TRUE參數GSUB:

x <- c("$129,900", "$139,900", "$254,000", "$260,000", "$290,000", "$295,000") 
as.numeric(gsub("$", "", gsub(",", "", x), fixed = TRUE))