我从网络服务器下载了一些数据,包括为人类格式化的价格,包括$和千位分隔符。
> 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,我会收到一条错误消息:
警告讯息:强制引入的NAs
结果是:
> head(m)
[1] NA NA NA NA NA NA
如何删除$符号?感谢
答案 0 :(得分: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"
答案 1 :(得分:6)
试试这个。这意味着用空字符串替换任何不是数字的东西:
as.numeric(gsub("\\D", "", dat))
或删除既不是数字也不是小数的任何内容:
as.numeric(gsub("[^0-9.]", "", dat))
更新:如果问题中的数据不具代表性,则添加第二种类似方法。
答案 2 :(得分: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
如果你想继续使用gsub的fixed = TRUE
参数:
x <- c("$129,900", "$139,900", "$254,000", "$260,000", "$290,000", "$295,000")
as.numeric(gsub("$", "", gsub(",", "", x), fixed = TRUE))