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) factor
ké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 login to post comments
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 login to post comments
Please login first to submit.