[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