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

Christian Bravo Sánchez christian.bravo.sanchez en gmail.com
Jue Oct 8 11:07:43 CEST 2015


Muchas gracias Marcelino, era exactamente lo que estaba buscando y
funciona perfecto.

Gracias también a Olivier y Carlos, indagaré en las funciones lapply y sapply.

Saludos.

El 8/10/15, Marcelino de la Cruz <marcelino.delacruz en upm.es> escribió:
> 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