【发布时间】:2019-04-16 18:32:19
【问题描述】:
我正在尝试将包含数字和空格的数据框转换为数字。目前,数字采用factor 格式,有些带有“,”。
df <- data.frame(num1 = c("123,456,789", "1,234,567", "1,234", ""), num2 = c("","1,012","","202"))
df
num1 num2
1 123,456,789
2 1,234,567 1,012
3 1,234
4 202
去掉“,”并转换为数字格式:
df2 = as.numeric(gsub(",","",df))
Warning message:
NAs introduced by coercion
有趣的是,如果我逐列执行相同的功能,它会起作用:
df$num1 = as.numeric(gsub(",","",df$num1))
df$num2 = as.numeric(gsub(",","",df$num2))
df
num1 num2
1 123456789 NA
2 1234567 1012
3 1234 NA
4 NA 202
我的问题是 1. 原因是什么,是否有办法避免逐列转换它们,因为实际数据框有更多列;和 2. 为将来的数字运算删除 NA 或用 0 替换它们的最佳方法是什么?我知道我可以使用gsub 这样做,但我想知道是否有更好的方法。
【问题讨论】:
-
gsub/sub工作于vectors你可以做df[] <- lapply(df, gsub, pattern =",", replacement = "") -
@akrun 我无法使用空格执行数字运算。用 0 替换空格的最佳方法是什么?非常感谢!