用逗号将货币转换为数字

Nic*_*ick 14 formatting currency r numeric

我在数据框中有一列如下:

COL1
$54,345
$65,231
$76,234
Run Code Online (Sandbox Code Playgroud)

我如何将其转换为:

COL1
54345
65231
76234
Run Code Online (Sandbox Code Playgroud)

我最初尝试的方式是:

df$COL1<-as.numeric(as.character(df$COL1))
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为它说NA被引入.

然后我尝试了这样:

df$COL1<-as.numeric(gsub("\\$","",as.character(df$COL1)))
Run Code Online (Sandbox Code Playgroud)

而这一切都发生了.

有任何想法吗?

Ron*_*hah 32

我们可以使用parse_numberreadr包里面删除任何非数字字符.

library(readr)
parse_number(df$COL1)
#[1] 54345 65231 76234
Run Code Online (Sandbox Code Playgroud)


akr*_*run 22

列中gsub没有工作的原因,是仍然是非数字的.因此,当转换为'numeric'时as.numeric,所有非数字元素都将转换为NA.因此,我们需要删除它们,$使其工作.

df1$COL1 <- as.numeric(gsub('[$,]', '', df1$COL1))
Run Code Online (Sandbox Code Playgroud)

我们匹配方括号()内部$,内部,[$,]以便将其视为该字符($单独留下具有特殊含义,即它表示字符串的结尾.)并将其替换为''.

或者我们可以转义(\\)字符($)以匹配它并替换为''.

df1$COL1 <- as.numeric(gsub('\\$|,', '', df1$COL1))
Run Code Online (Sandbox Code Playgroud)

  • @AlexS.Sandoval 正则表达式基于模式。这里,不包括括号。如果你包括它应该可以工作 (2认同)
  • 要处理由括号​​表示的负货币,请在调用 as.numeric 之前尝试此操作: `df1$COL1 &lt;- as.numeric(gsub('[$,)]', '', df1$COL1)); df1$COL1 &lt;- sub('[(]', '-', df1$COL1` (2认同)