Christian Bravo Sánchez
2015-Oct-08 09:07 UTC
[R-es] Tranformar falsas variables char en numéricas (cerrado)
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 >>> >> >> >> > >