【问题标题】:R: removing the '$' symbolsR:删除“$”符号
【发布时间】:2015-10-07 00:05:20
【问题描述】:

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

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

我能够摆脱逗号,使用

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

但是

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

不删除美元符号。如果我尝试mn &lt;- as.numeric(m) 或 as.integer,我会收到一条错误消息:

警告消息:强制引入的 NAs

结果是:

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

如何删除 $ 符号?谢谢

【问题讨论】:

    标签: regex r


    【解决方案1】:
     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 &lt;- data.frame(gsub('[$]', '', m))
    • 使用gsub("[$,]", "", dat)作为正则表达式应该一步完成
    • 感谢 Dason,这更容易了!
    • @Dason 对!我的现在看起来很丑:(
    • 作为另一个选项,还有fixed 参数可以让您关闭$ 的正则表达式解释。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 如果您的数字中有小数,请小心,因为这会删除小数点。
    【解决方案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))
    

    【讨论】:

      猜你喜欢
      • 2012-01-31
      • 2014-12-11
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多