juan manuel dias
2022-May-31 23:51 UTC
[R-es] separar una variable en dos variables por una o más condiciones
Muy bueno gracias Carlos! El mar., 31 de mayo de 2022 18:25, Carlos Ortega <cof en qualityexcellence.es> escribió:> Hola, > > Esta es otra forma de resolverlo en una sola pasada... > > > library(data.table) > > library(tidytable) > > library(stringi) > > > > variable<- c("9,301E+11","8,301E+11","00001-00170818","1000055365","G.A. > 001-24699570") > > Unidades <- c("remito","remito","remito","remito","remito") > > # base_1<-cbind(variable,Unidades) > > > > datos <- data.table( > + variable = variable, > + Unidades = Unidades > + ) > > > > datos %>% > + mutate.( variable_1 = ifelse.(stri_detect_fixed(variable, "E+"), > variable, NA)) %>% > + mutate.( variable_2 = ifelse.(is.na(variable_1), variable, NA)) %>% > + as.data.table() > variable Unidades variable_1 variable_2 > <char> <char> <char> <char> > 1: 9,301E+11 remito 9,301E+11 <NA> > 2: 8,301E+11 remito 8,301E+11 <NA> > 3: 00001-00170818 remito <NA> 00001-00170818 > 4: 1000055365 remito <NA> 1000055365 > 5: G.A. 001-24699570 remito <NA> G.A. 001-24699570 > > Gracias, > Carlos Ortega > www.qualityexcellence.es > > El mar, 31 may 2022 a las 23:10, juan manuel dias (<juamadias en gmail.com>) > escribió: > >> hola muchas gracias! ahora prueba esto que me decís! >> por ahora resolví así, seguro luego lo mejore! >> >> a$var.3<-(!str_detect(a$Remito,"\\E\\+")) >> a$var.4<-(str_detect(a$Remito,"\\E\\+")) >> >> a<-a %>% >> mutate(var4=ifelse (var.3==FALSE ,Remito,NA)) >> >> a<-a %>% >> mutate(var5=ifelse (var.3==TRUE ,Remito,NA)) >> >> a$var.6<-ifelse(is.na(a$var4),a$var5,a$var4) >> >> >> El mar, 31 may 2022 a las 17:53, Marcelino de la Cruz Rot (< >> marcelino.delacruz en urjc.es>) escribió: >> >> > Hola: >> > Puedes conseguirlo fácilmente con algunas frases de R básico: >> > >> > variable<- c("9,301E+11","8,301E+11","00001-00170818","1000055365","G.A. >> > 001-24699570") >> > cuales.cientificos <- grep("E+", variable) >> > >> > cientificos <- variable[cuales.cientificos] >> > cientificos <- sub(",", ".", cientificos) >> > options(scipen=999) >> > cientificos <- as.character(as.numeric(cientificos)) >> > >> > variable3 <- variable >> > variable3[cuales.cientificos] <- cientificos >> > variable3 >> > [1] "930100000000" "830100000000" "00001-00170818" >> > "1000055365" "G.A. 001-24699570" >> > >> > >> > Un saludo, >> > Marcelino >> > >> > >> > >> > El 31/05/2022 a las 21:38, juan manuel dias escribió: >> > > Hola, >> > > >> > > Tengo una base de datos y en uno de las variables/vectores, que es >> > > formato character, dentro de ese vector me encuentro que tengo casos >> > > con notación científica, casos alfanuméricos etc. >> > > >> > > Tengo que dividir esa variable en dos nuevas variables, de forma tal >> > > que me quede una variable con los casos que tengan notación científica >> > > para convertir a número, otro que donde tenga los alfanuméricos. >> > > variable<- >> > > c("9,301E+11","8,301E+11","00001-00170818","1000055365","G.A. >> > > 001-24699570") >> > > Unidades <- c("remito","remito","remito","remito","remito") >> > > base.1<-cbind(variable,Unidades) >> > > base.1 >> > > image.png >> > > >> > > Lo que necesito sería separar "variable" asi: >> > > >> > > variable<- >> > > c("9,301E+11","8,301E+11","00001-00170818","1000055365","G.A. >> > > 001-24699570") >> > > variable.1<-c("9,301E+11","8,301E+11",NA,NA,NA) >> > > variable.2<-c("","","00001-00170818","1000055365","G.A. 001-24699570") >> > > Unidades <- c("remito","remito","remito","remito","remito") >> > > base.2<-as.data.frame(cbind(variable,variable.1,variable.2,Unidades)) >> > > >> > > image.png >> > > >> > > Lo que no logro hacer es separar "variable" en variable.1 y >> variable.2. >> > > Intenté con str_detect dentro de un mutate y con if_else pero no logré >> > > que me de el resultado que busco. >> > > >> > > #### >> > > !str_detect(base2$variable.1,"\\E\\+")) >> > > str_detect( base2$variable.1 ,"\\E\\+")) >> > > >> > > Teniendo esa separación luego hago lo siguiente: >> > > >> > > ## reemplazo comas por puntos "." en variable.1 para convertir a >> > numérica >> > > ## convierto numérica variable.1 >> > > ## y finalmente elimino notación científica >> > > base.2$variable.1 <-(gsub(",", ".", base.2$variable.1)) >> > > base.2$variable.1 <-as.numeric(base.2$variable.1) >> > > base.2$variable.1<-format(base.2$variable.1, scientific=F) >> > > >> > > Y finalmente crear una variable "variable.3" que quede así: >> > > >> > > ## genero una variable final >> > > base.2$variable.3<-ifelse(base.2$variable.1==" >> > > NA",base.2$variable.2,base.2$variable.1) >> > > view(base.2) >> > > >> > > image.png >> > > >> > > Gracias! >> > > >> > > Juan. >> > > >> > > >> > > _______________________________________________ >> > > R-help-es mailing list >> > > R-help-es en r-project.org >> > > https://stat.ethz.ch/mailman/listinfo/r-help-es >> > >> > >> > -- >> > Marcelino de la Cruz Rot >> > Depto. de Biología y Geología >> > Física y Química Inorgánica >> > Universidad Rey Juan Carlos >> > Móstoles España >> > >> > _______________________________________________ >> > R-help-es mailing list >> > R-help-es en r-project.org >> > https://stat.ethz.ch/mailman/listinfo/r-help-es >> > >> >> [[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 >[[alternative HTML version deleted]]