我在数据框中有一列如下:
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)))
同样的事情发生了。
有什么想法吗?
答案 0 :(得分:20)
我们可以使用parse_number
包中的readr
删除任何非数字字符。
library(readr)
parse_number(df$COL1)
#[1] 54345 65231 76234
答案 1 :(得分:16)
gsub
不起作用的原因是列中有,
,它仍然是非数字的。因此,当使用as.numeric
转换为“数字”时,所有非数字元素都将转换为NA
。因此,我们需要删除,
和$
以使其正常工作。
df1$COL1 <- as.numeric(gsub('[$,]', '', df1$COL1))
我们匹配方括号($
)内的,
和[$,]
,以便将其视为该字符($
仅具有特殊含义,即它表示字符串的结尾。)并将其替换为''
。
或者我们可以逃避(\\
)角色($
)以匹配它并替换为''
。
df1$COL1 <- as.numeric(gsub('\\$|,', '', df1$COL1))
答案 2 :(得分:0)
另一个使用字符串库删除“ $”和“,”的选项,然后进行如下转换:
df %>% mutate(COL1 = COL1 %>% str_remove_all("\\$,") %>% as.numeric())
答案 3 :(得分:0)
嵌套的gsub处理底片并进行转换以使其正常运行并利用NSE
transform(df, COL1 = as.numeric(gsub("[$),]", "", gsub("^\\(", "-", COL1))))