我在数据框中有一个列,如下所示:
COL1
$54,345
$65,231
$76,234
我如何将其转换为:
COL1
54345
65231
76234
我最初尝试的方式是:
df$COL1<-as.numeric(as.character(df$COL1))
那没用,因为它说引入了NA。
然后我像这样尝试:
df$COL1<-as.numeric(gsub("\\$","",as.character(df$COL1)))
同样的事情发生了。
有任何想法吗?
列为何gsub
不起作用的原因,
在于该列,该列仍然是非数字的。因此,当使用转换为“数字”时as.numeric
,所有非数字元素都将转换为NA
。因此,我们需要同时删除它们,
并$
使其起作用。
df1$COL1 <- as.numeric(gsub('[$,]', '', df1$COL1))
我们将$
和,
放在方括号([$,]
)内,以便将其视为该字符($
单独留有特殊含义,即表示字符串的结尾。)并将其替换为''
。
或者我们可以转义(\\
)字符($
)使其匹配并替换为''
。
df1$COL1 <- as.numeric(gsub('\\$|,', '', df1$COL1))
对于正数,这很好用,但对于负数货币似乎不起作用。例如,运行代码后,所有正值都起作用,但负值($ 100,00.04)却不起作用。
@ AlexS.Sandoval
-
在那之前有迹象吗?否。数据源的格式设置为在括号中显示负货币。
@ AlexS.Sandoval正则表达式基于模式。此处不包括括号。如果您包括它应该工作
要处理以括号括起来的负数货币,请在调用as.numeric之前尝试以下操作:
df1$COL1 <- as.numeric(gsub('[$,)]', '', df1$COL1)); df1$COL1 <- sub('[(]', '-', df1$COL1