Egy factor változót, hogyan konvertáljunk numeric változóvá?

0
0

Ha van egy factor változó, ami valójában numeric (csak mondjuk egy adatbeolvasási hiba miatt (pl.: NoN érték szerepel a beolvasott adatbázisban) factorként jelenik meg az adatbézisban és vissza szeretném konvertálni numeric változóvá, akkor az as.numeric parancs miért a levels értékeket adja vissza?

(fac <- as.factor(rnorm(10, 2)))
## [1] -0.554380142390025 3.01286043579667   2.14062458421036   0.795901374774481  1.1525828780559    2.646332153364     2.17778700367428   1.98899049113525   3.01461688372712   2.2758493636756   
## Levels: -0.554380142390025 0.795901374774481 1.1525828780559 1.98899049113525 2.14062458421036 2.17778700367428 2.2758493636756 2.646332153364 3.01286043579667 3.01461688372712
as.numeric(fac)
## [1]  1  9  5  2  3  8  6  4 10  7

Mi a leghatékonyabb konverzió?

  • You must to post comments
0
0

Nem véletlenül alakult így ki, mindenesetre relatíve könnyen feloldható. Mivel nekünk a valójában a levels által jelölt értékekre van szükségünk:

as.character(fac)
## [1] "-0.554380142390025" "3.01286043579667"   "2.14062458421036"   "0.795901374774481"  "1.1525828780559"    "2.646332153364"     "2.17778700367428"   "1.98899049113525"   "3.01461688372712"  
## [10] "2.2758493636756"

ezért az egyik legegyszerűbb megoldás:

as.numeric(as.character(fac))
## [1] -0.5543801424  3.0128604358  2.1406245842  0.7959013748  1.1525828781  2.6463321534  2.1777870037  1.9889904911  3.0146168837  2.2758493637

Ami bár lehet egyszerű, de nem hatékony. Sok elemű vektorok esetén inkább ez ajánlott:

as.numeric.factor <- function(x) { (as.numeric(levels(x)))[x] }
as.numeric.factor(fac)
## [1] -0.5543801424  3.0128604358  2.1406245842  0.7959013748  1.1525828781  2.6463321534  2.1777870037  1.9889904911  3.0146168837  2.2758493637
  • You must to post comments
1 találat mutatása
Új válasz írása

Please first to submit.