r - R:将字符列转换为数字时出错
问题描述
我有以下 R 数据框:
'data.frame': 902297 obs. of 7 variables:
$ EVTYPE : Factor w/ 985 levels " HIGH SURF ADVISORY",..: 834 834 834 834 834 834 834 834 834 834 ...
$ FATALITIES: num 0 0 0 0 0 0 0 0 1 0 ...
$ INJURIES : num 15 0 2 2 2 6 1 0 14 0 ...
$ PROPDMG : num 25 2.5 25 2.5 2.5 2.5 2.5 2.5 25 25 ...
$ PROPDMGEXP: chr "10^3" "10^3" "10^3" "10^3" ...
$ CROPDMG : num 0 0 0 0 0 0 0 0 0 0 ...
$ CROPDMGEXP: chr "0" "0" "0" "0" ...
列PROPDMGEXP
和CROPDMGEXP
是字符,我想将它们转换为数字。
列中的值如下:
print(unique(newdata$PROPDMGEXP))
> "10^3" "10^6" "0" "10^9" "1" "10" "10^2"
print(unique(newdata$CROPDMGEXP))
> "0" "10^6" "10^3" "10^9" "10"
我试图通过以下方式将列转换为数字:
newdata$PROPDMGEXP <- as.numeric(mydata$PROPDMGEXP)
newdata$CROPDMGEXP <- as.numeric(mydata$CROPDMGEXP)
但是当我这样做时出现以下错误:
我不确定为什么会收到此错误以及如何解决它。任何见解都值得赞赏。
解决方案
当您转换为数字时,R 不会尝试在此过程中评估表达式。在引擎盖下,10^3
在 R 中实际上是对函数的调用'^'(10, 3)
。如果您想将幂直接转换为数字,则可以使用e
符号代替。例如:
s <- c("10^3", "10^6", "0", "10^9", "1", "10", "10^2")
as.numeric(s)
#> [1] NA NA 0 NA 1 10 NA
#> Warning message:
#> NAs introduced by coercion
s2 <- gsub("0\\^", "e", s)
s2
#> [1] "1e3" "1e6" "0" "1e9" "1" "10" "1e2"
as.numeric(s2)
#> [1] 1e+03 1e+06 0e+00 1e+09 1e+00 1e+01 1e+02
推荐阅读
- angular - 来自单个组件的 Angular 多个 http 请求
- react-native - 那里有像这样的共享库吗?对于反应原生
- reactjs - reactjs - 类父组件调用函数子组件方法
- sql - 如何从 MariaDB 中检索任何日期格式为 YYYY-MM-DD 的数据?
- asp.net - 排序后的隐藏字段
- html - 四个大小相同的图像的网格 - 无法让它们顶部对齐
- python - R Studio Python 集成错误 - OSError: [WinError 6] 句柄无效 & TypeError: 'module' 类型的对象没有 len()
- vbscript - 将在所有子文件夹上执行的 VBS 脚本
- java - 如何在android中创建两级列表下拉组件
- docker - 使用映射卷到 kong 容器的持久数据