[R-es] Tranformar falsas variables char en numéricas

Marcelino de la Cruz marcelino.delacruz en upm.es
Jue Oct 8 10:47:14 CEST 2015


Hola,

Yo creo que lo que Christian Bravo quiere hacer no es solamente saber si 
una columna es numeric o factor o texto, sino, si es texto o factor, 
comprobar si lo almacenado "parece" numérico, y en ese caso, transformarlo.


Una manera de hacerlo sería la siguiente:

# sacamos una copia para no machacar los datos originales
d2 <- d

# evalúa la semejanza y realiza los cambios:

for(i in 1:(dim(d)[2])){
  if(!is.numeric(d[,i])){
     if(is.factor(d[,i])){
         if (identical(levels(factor(as.numeric(levels(d[,i])))),
                     levels(d[,i]))) d2[,i] <- as.numeric(d[,i])
     }	
     if(is.character(d[,i])){
        if (identical(as.character(as.numeric(d[,i])),
                       d[,i])) d2[,i] <- as.numeric(d[,i])
     }
   }
}


> unlist(lapply(d2, class))
        char   fake_char         fac    char_fac         num
"character"   "numeric"   "numeric"    "factor"   "integer"




El 08/10/2015 a las 10:06, Carlos Ortega escribió:
> Hola,
>
> Y para cuando sepas un poco más....
>
> #-----------------------------
> unlist(lapply(d, class))
> #-----------------------------
>
>> unlist(lapply(d, class))
>         char   fake_char         fac    char_fac         num
> "character" "character"    "factor"    "factor"   "integer"
>
> Saludos,
> Carlos Ortega
>
> El 8 de octubre de 2015, 10:01, Carlos Ortega <cof en qualityexcellence.es>
> escribió:
>
>> Hola,
>>
>> Una manera muy sencilla de hacerlo es esta:
>>
>> #-------------------------------
>> whatcol <- 0
>> for(i in 1:ncol(d)){
>>    whatcol[i] <-class(d[,i])
>> }
>> whatcol
>> #--------------------------------
>>
>>> whatcol <- 0
>>> for(i in 1:ncol(d)){
>> +   whatcol[i] <-class(d[,i])
>> + }
>>> whatcol
>> [1] "character" "character" "factor"    "factor"    "integer"
>>
>> Saludos,
>> Carlos Ortega
>> www.qualityexcellence.es
>>
>>
>>
>> El 8 de octubre de 2015, 9:29, Christian Bravo Sánchez <
>> christian.bravo.sanchez en gmail.com> escribió:
>>
>>> Hola usuarios de R,
>>>
>>> Antes de nada presentarme, soy nuevo en R (antiguo... y bueno actual
>>> usuario de SAS), llevo menos de un mes y estoy intentando empezar con
>>> pequeñas cosas.
>>>
>>> Hay un tema que me está llevando bastante tiempo y por más que investigo y
>>> hago pruebas no logro saber como se hace; veréis tengo un data.frame el
>>> cuál tiene bastante variables y todas ellas clasificadas como char, sin
>>> embargo no todas son char sino que existen variables númericas. Dicho
>>> esto,
>>> lo que necesito de algún modo es recorrer todas las variables y saber cual
>>> de ellas son numéricas (y por supuesto transformarlas).
>>>
>>> Adjunto un ejemplo reproducible:
>>>
>>> d <- data.frame(char = letters[1:5],
>>>                  fake_char = as.character(1:5),
>>>                  fac = factor(1:5),
>>>                  char_fac = factor(letters[1:5]),
>>>                  num = 1:5, stringsAsFactors = FALSE)
>>> d
>>>    char fake_char fac char_fac num
>>> 1    a         1   1        a   1
>>> 2    b         2   2        b   2
>>> 3    c         3   3        c   3
>>> 4    d         4   4        d   4
>>> 5    e         5   5        e   5
>>>> str(d)
>>> 'data.frame':   5 obs. of  5 variables:
>>>   $ char     : chr  "a" "b" "c" "d" ...
>>>   $ fake_char: chr  "1" "2" "3" "4" ...
>>>   $ fac      : Factor w/ 5 levels "1","2","3","4",..: 1 2 3 4 5
>>>   $ char_fac : Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
>>>   $ num      : int  1 2 3 4 5
>>>
>>> Como véis la variable fake_char es numérica. Por favor tened en cuenta que
>>> trabajo con muchas variables, la resolución (he aquí la dificultad para
>>> mí)
>>> debería recorrer todo el data.frame de manera automática.
>>>
>>> Muchisimas gracias de antemano.
>>>
>>> Saludos.
>>>
>>>          [[alternative HTML version deleted]]
>>>
>>> _______________________________________________
>>> R-help-es mailing list
>>> R-help-es en r-project.org
>>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>>
>>
>>
>>
>> --
>> Saludos,
>> Carlos Ortega
>> www.qualityexcellence.es
>>
>
>
>



Más información sobre la lista de distribución R-help-es