2013-02-05 110 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))