[R-es] separar una variable en dos variables por una o más condiciones

juan manuel dias ju@m@d|@@ @end|ng |rom gm@||@com
Mie Jun 1 01:51:29 CEST 2022


Muy bueno gracias Carlos!

El mar., 31 de mayo de 2022 18:25, Carlos Ortega <cof using 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 using 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 using 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 using 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 using r-project.org
>> > https://stat.ethz.ch/mailman/listinfo/r-help-es
>> >
>>
>>         [[alternative HTML version deleted]]
>>
>> _______________________________________________
>> R-help-es mailing list
>> R-help-es using r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>
>
> --
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>

	[[alternative HTML version deleted]]



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