R: 去除"$"符号

3

我从一个Web服务器下载了一些数据,其中包括以人类可读的方式格式化的价格,包括美元符号和千位分隔符。

> 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

如何去掉美元符号?谢谢

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"

是的,这很好用,谢谢!m <- data.frame(gsub('[$]', '', m)) - K Owen - Reinstate Monica
4
使用gsub("[$,]", "", dat)作为正则表达式可以在一步中完成该操作。 - Dason
谢谢Dason,这甚至更容易! - K Owen - Reinstate Monica
@Dason 对!我的看起来现在很丑 :( - agstudy
2
作为另一个选项,还有fixed参数,它允许您关闭$的正则表达式解释。 - joran

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))

yielding:

> 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))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接