cbind转换因子为数字

Gli*_*tch 4 r cbind

不知道为什么会这样.我有一个df2包含以下变量的数据框:

          EVTYPE TOTAL_FATALITIES TOTAL_INJURIES
          (fctr)            (dbl)          (dbl)
1        TORNADO             5633          91346
2 EXCESSIVE HEAT             1903           6525
3    FLASH FLOOD              978           1777
4           HEAT              937           2100
5      LIGHTNING              816           5230
6      TSTM WIND              504           6957

    > df2$TOTAL_FATALITIES

 [1] 5633 1903  978  937  816  504  470  368  248  224  206  204  172  160  133  127  103  101  101

    > df2$EVTYPE

 [1] TORNADO           EXCESSIVE HEAT    FLASH FLOOD       HEAT              LIGHTNING        
 [6] TSTM WIND         FLOOD             RIP CURRENT       HIGH WIND         AVALANCHE        
[11] WINTER STORM      RIP CURRENTS      HEAT WAVE         EXTREME COLD      THUNDERSTORM WIND
[16] HEAVY SNOW        STRONG WIND       BLIZZARD          HIGH SURF        
985 Levels:    HIGH SURF ADVISORY  COASTAL FLOOD  FLASH FLOOD  LIGHTNING ... WND

    > df2$TOTAL_INJURIES

 [1] 91346  6525  1777  2100  5230  6957  6789   232  1137   170  1321   297   309   231  1488  1021
[17]   280   805   152
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个名为的新列SevType- 我将存储值是受伤还是致命.

但是,当我使用cbind时df2$EVTYPE,它会将因子转换为数字,如下所示.

    > head(cbind(Event=df2$EVTYPE,Total = df2$TOTAL_INJURIES,Severity="INJURE"))
     Event Total   Severity
[1,] "834" "91346" "INJURE"
[2,] "130" "6525"  "INJURE"
[3,] "153" "1777"  "INJURE"
[4,] "275" "2100"  "INJURE"
[5,] "464" "5230"  "INJURE"
[6,] "856" "6957"  "INJURE"
Run Code Online (Sandbox Code Playgroud)

请注意,Event在[1,]已从TORNADO更改为834.

有关为何发生这种情况的任何提示?

akr*_*run 5

我们正在cbind向量,输出将是一个matrix.在matrix只能容纳一个class.因此,如果有任何非数字向量,它会将整个矩阵转换为'character',并且由于第一列已经是a factor,我们得到该因子的数值级别.更好的是使用data.frame

data.frame(Event=df2$EVTYPE,Total = df2$TOTAL_INJURIES,Severity="INJURE")
Run Code Online (Sandbox Code Playgroud)

或者我们可以使用bind_colsdata_frame来自dplyr