首页 > 解决方案 > 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" ...

PROPDMGEXPCROPDMGEXP是字符,我想将它们转换为数字。

列中的值如下:

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)

但是当我这样做时出现以下错误:

在此处输入图像描述

我不确定为什么会收到此错误以及如何解决它。任何见解都值得赞赏。

标签: rdataframe

解决方案


当您转换为数字时,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 

推荐阅读