3

我从网络服务器下载了一些数据,包括为人类格式化的价格,包括美元和千位分隔符。

> 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,我会收到一条错误消息:

警告信息:强制引入的 NA

结果是:

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

如何删除 $ 符号?谢谢

4

3 回答 3

8
 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"
于 2013-02-05T03:39:31.563 回答
6

试试这个。这意味着用空字符串替换任何不是数字的东西:

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

或删除既不是数字也不是小数的任何内容:

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

更新:添加了第二种类似的方法,以防问题中的数据不具有代表性。

于 2013-02-05T03:46:31.193 回答
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 = TRUEgsub 的参数:

x <- c("$129,900", "$139,900", "$254,000", "$260,000", "$290,000", "$295,000")
as.numeric(gsub("$", "", gsub(",", "", x), fixed = TRUE))
于 2013-02-05T03:55:36.090 回答