R将因子转换为数字,同时允许NA值

时间:2017-10-23 09:48:43

标签: r types random-forest

我想将数据框中的多个列从因子转换为数字。

以下是一个示例列:

unique(f$HUVEC_fitCons_score)
  [1] 0.635551 0.714379 0.638787 0.562822 0.542086 0.620976 0.56751  0.554799 0.592323 0.63947  0.627883
 [12] 0.665054 0.645665 0.492483 0.491896 0.636168 0.711    0.604944 0.613276 0.56214  0.727631 0.567892
 [23] 0.699875 0.635259 0.655142 0.733575 0.645948 0.683762 0.372554 0.249971 0.616125 0.631631 0.564101
 [34] 0.765457 0.633917 0.463824 0.664235 0.530356 0.6365   0.581474 <NA>     0.620846 0.528226 0.735409
 [45] 0.691587 0.586402 0.7233   0.651492 0.825845 0.058706 0.584449 0.572988 0.618803 0.526803 0.699908
 [56] 0.478617 0.683672 0.505526 0.741806 0.567339 0.657601 0.683535 0.581314 0.603991 0.648885 0.591603
 [67] 0.604282 0.526665 0.621717 0.830532 0.579976 0.0      0.638833 0.599892 0.6691   0.677812 0.677038
 [78] 0.756233 0.466023 0.607083 0.508809 0.322989 0.349732 0.620204 0.662026 0.678554 0.616919 0.668105
 [89] 0.755437 0.503917 0.273489 0.704051 0.525792 0.687789 0.3752   0.673998 0.421255 0.756605 0.665031
[100] 0.59522  0.447301 0.622129 0.548927 0.563494 0.550183 0.656636 0.296957 0.71     0.663205 0.836244
[111] 0.605231 0.055017 0.297325 0.574951 0.444512 0.662433 0.654926 0.757729 0.629945 0.75052  0.674467
[122] 0.76194  0.536845 0.113707 0.192219 0.52698  4.41E-4  0.057018 0.003489 0.24341  0.223356 0.166187
[133] 0.767244 0.549297 0.404113 0.062806 0.692231 0.600526 0.670209 0.264475 0.152031 0.721622 0.159066
[144] 0.375513 0.695668 0.221012 0.615788 0.413926 0.631177 0.759125 0.74596  0.650387 0.241949 0.553451
[155] 0.655445 0.341033 0.092715 0.600164 0.602482 0.075334 0.553173 0.48735  0.566403 0.421638 0.054758
[166] 0.221052 0.675733 0.128931 0.272564 0.345915 0.088406 0.078987 0.147424 0.186031 0.68491  0.342787
[177] 0.634344 0.00508  0.236223 0.016238 0.160608 0.649648 0.330827 0.725737 0.175304 0.726065 0.765956
[188] 0.666353 0.357269 0.083433 0.22236 
192 Levels: - 0.0 0.003489 0.00508 0.016238 0.054758 0.055017 0.057018 0.058706 0.062806 ... 4.41E-4

当我尝试as.numeric(f$HUVEC_fitCons_score)

我得到了

as.numeric(f$HUVEC_fitCons_score)
   [1] 123 123 169 126  80  80  72  80 113  80  80 169  85  78  95 128 116 145 129 126  61  61  60 124 169
  [26] 169 169 169 168 168 168 103 103 106  80 106  80  80  72 106  79 174 129 106 106  80  80  80  80 106
  [51]  86 103 103 174 129 164 106 122 174 174 136 103 169 169  72  72  72  72 169 169 175 169 169 169 106
  [76] 136 136  86 136 136 136 136 123 123 123  86  86 130 164 136 136 136 136 123 123 136 136 123 164 158
 [101] 136 136 136  86  86  86 136  85 128 123  47  33  47  72  72  72 124 169 169  86  86  86  72 108 108
 [126] 169 169 169 169 169 169 168 168 169 168 106 106 106 106 106  72 106 119 123 169 174 169 169 174 174
 [151] 174 174 169 168 168 169 169 169 169 169 169 169 123 175 169 169 169 168 168 168 168 168 168 168 168
 [176] 124 168 168 168 106 106 106 106 106 106 169 169 169 169 169  79 169  82  82  80 106 106  86 186 164
 [201] 124  72 169 106 106 120 106 106 106 106 106  56  95 143 124  70  70 128 169 169 169 169 169 169 169
 [226] 169 169 169 169 169 169 169 169 169 169 169 169 169 169 123  70  70  70 125 106 169 169 169 169 169
 [251] 169 123 169 123 174 123  91  82  82  82  82  82  82  82  82  NA  NA  82  82 112  82  82  82  82  82
 [276]  82  82  82 123 123  80  72 123 106 106 106 106 106 106 106  86  82  82  82  82 112 112 112 112  82
 [301]  82  82  82  82  82  82  82 106 106 106 106 123  69 158 158 158 136 136 136 136  86  86 169 176 168
 [326] 169 169 169 169  82  72  72  70  70  80 106 106 106  80 106 106 106 106  78 106  80  80  80 106 106
 [351] 106 161 108  72  93  93 168 168 168 168 176 171 134  72 169 129  72  72 169 169 169 169 169 169 169
 [376] 169 158 169 169 169 169 169 169  79  72  72  70  82  82  72  72  72  72  72 189 106 106 106   9  82
 [401]  92  82 106  82  82  82  82  82  82  82 106 106 106 106  72  72 106  87  87 158  61 169 169 169 175
 [426] 175 169 106  86  60 169 123 169 169 169 169 123 158 158  72  72 123 123  86  72  72  92  92  92  92
 [451] 106 106 110  91  47  47 169 169 169 169 169 169 169 169 161 161 169 169 169 169 169 169 169 169 169
 [476] 169 169 169 169 169 169 169 169 169 168 168 168 168 168 168 169 169  67 119  67 119  86 106 168 168
 [501] 165 136  86  86  70  70  58  58  58  72  72  72  72  72  72  72  72  72  72  72  72 119 119 119 119
 [526] 119  72  72 128 128 128 157 157 157 128 128  70 108 108  72  63 168 176 176 168 168 168 177 177 177
 [551] 168 168 171 168 168 168 168 168 176  92 106 106 106  84 169 169 169 169 128 106  70  72  72 169 169
 [576] 168 169 169 169 168 177 168 168 168 169 136 158 139 169 125 169 168 168 168 168 168 177 168 168 168
 [601] 168 176 169 161 169 174 164 156  90 101 101  82  82  72  72 125  72  72  72  72  86 106 106 106 106
 [626] 106 106  70  70  70  70  70  72  72 112 131 168  79  72 106 112 112  82  82  82  82  82 112 112 106
 [651] 169 123  94  94 169 123 169  72 106  70  70  70  70  70  72  72  70 102  79 106  70  70  66 123 123
 [676] 169 136  72  72  66  72  72  72 169 169  61 168 123 123 123 168 169 123 106 106 106 106 106  72  72
 [701] 114 158 158 158 169 169 123 136 123 190 119 123  86 106 169 123 176 128 169 168 168 169 169 169 169
 [726] 176 176 169  93  89  86  86 136 169  80  80  92  86 126  84 129 143  92  92 106 106 106 128 123 124
 [751] 124 131  70  80 106 169 169  89 136  86  60  60  82  82  82  82  80  80  80  72  72  72 113 113 113
 [776] 158 158   2 165 174 168 169 106 169 123 158 169  80 106 168 127  97 176 168 169 148 106 106 106 106
 [801] 106  82 123 123 106 106 106 106  72  72  72  70 116  86 168 128 106 128  86 169 123 123 123 136 136
 [826] 130 174  72 106 106  72 169 123 123  86 123 123 103 168 143  72 106  86  86  86  86  86 136 112  72
 [851]  72 169 154  72 106 106 177 169 169 169 169 123  60 123 123 123 123 123 158 158 169 169 169 169 169
 [876] 125  82 168 168 168  70  70  72  72  72  93  70  70  33  33 176 168 169 169 169 169 128  72  72  72
 [901]  72 169  91  91 126 176 176 176 143 119 153 106  86 106 169 169 169  79 126 126 126 126 176 171 181
 [926] 181 181 181 181 176 176 168 168  57  57 105 169 169  47 124 124  64  64 124 124 124 168  39  39  44
 [951]  94 176 169 136 136 169 168 168 177 177 168 168 168 168 123 169 169 174 111  69 169 169 169 169 169
 [976] 169 169 169 169 139 169 123 123 123 124 124 168 169 169 169 169 123  86 123 123 168 168 140  82  82
 [ reached getOption("max.print") -- omitted 30773 entries ]

这显然不是我想要的输出。是<NA>4.41E-4弄乱了吗?我只是想将这样一个列从因子更改为数字,因为稍后我使用randomForest()并且只允许给定特征的一定数量的因子级别。

感谢。

2 个答案:

答案 0 :(得分:3)

你应该使用

as.numeric(as.character(f$HUVEC_fitCons_score))

只需使用as.numeric()转换基础因子值(第一级为1,第二级为2 ......)为数值。

但据我所知,NA默认情况下不允许使用randomForest()值。您必须调整参数na.action。 (见?randomForest

相反,您还可以删除数据集中包含NA值的所有行:

library(dplyr)
f <- f %>% na.omit()

答案 1 :(得分:0)

我不确定NA值是否有意义作为响应变量的一部分。如果值确实未知,则需要从模型中删除这些数据点或用其他内容替换这些数据点。触手可及的一个选项是转换为数字,然后将所有response <- as.numeric(levels(f$HUVEC_fitCons_score))[f$HUVEC_fitCons_score] response[is.na(response)] <- median(response, na.rm=TRUE) 值替换为中位数:

{{1}}