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

Marcelino de la Cruz Rot m@rce||no@de|@cruz @end|ng |rom urjc@e@
Mar Mayo 31 22:53:34 CEST 2022


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



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