[R-es] Colapsar una matriz con NA en una única fila
Carlos Ortega
cof en qualityexcellence.es
Mar Oct 11 21:25:07 CEST 2016
Hola,
Esto te puede valer...
> # Crear un df con NAs y solo un elemento por columna no NA
> df <- as.data.frame(matrix(data = NA, nrow = 10, ncol = 5 ))
> set.seed(1)
> df2 <- apply(df, 2, function(x) { x[sample(1:10,1)] <- rnorm(1); x})
> df2
V1 V2 V3 V4 V5
[1,] NA NA NA NA NA
[2,] NA NA NA -1.53995 NA
[3,] NA NA NA NA NA
[4,] NA NA NA NA NA
[5,] NA NA NA NA NA
[6,] -0.6264538 NA NA NA NA
[7,] NA NA 1.595281 NA NA
[8,] NA NA NA NA 0.4874291
[9,] NA 1.329799 NA NA NA
[10,] NA NA NA NA NA
>
> # Encuentra en cada col las filas con NAs
> idx <- apply(df2,2, function(x) { which(!is.na(x)) } )
> # Extrae de cada col del df con NA el elemento no NA
> idx_df <- data.frame()
> for(i in 1:ncol(df2)) {
+ idx_df[1,i] <- df2[idx[i], i]
+ }
> idx_df
V1 V2 V3 V4 V5
1 -0.6264538 1.329799 1.595281 -1.53995 0.4874291
>
Saludos,
Carlos Ortega
www.qualityexcellence.es
El 11 de octubre de 2016, 20:53, Oscar Benitez <oscar.benitez1962 en gmail.com>
escribió:
> Javier
> Muchas gracias por su respuesta
> Aunque no está funcionando, pues si ejecuto:
>
> EncDTE1<- t.EncDTE1[ !is.na(t.EncDTE1$Var1),] obtengo Var1, Var2,
> Var3,...Varn con datos "texto", NA, NA....NA
>
> Pero al ejecutar
>
> EncDTE1<- t.EncDTE1[ !is.na(t.EncDTE1$Var2),] obtengo Var1, Var2,
> Var3,...Varn con datos NA,"texto", NA....NA
>
>
> Estoy tratando de dar la vuelta con el loop otra vez, pero aún no lo
> consigo...
> Muchas gracias
>
>
>
>
> El 11 de octubre de 2016, 15:27, <javier.ruben.marcuzzi en gmail.com>
> escribió:
>
> > Estimado Oscar Benitez
> >
> >
> >
> > Yo utilizo algo como lo siguiente:
> >
> >
> >
> > Datos<- Datos[ !is.na(Datos$DatoX),] #Solo dejo filas en las que las
> > tratamiento son diferentes de cero
> >
> >
> >
> > Javier Rubén Marcuzzi
> >
> >
> >
> > *De: *Oscar Benitez <oscar.benitez1962 en gmail.com>
> > *Enviado: *martes, 11 de octubre de 2016 15:22
> > *Para: *R-help-es <r-help-es en r-project.org>
> > *Asunto: *[R-es] Colapsar una matriz con NA en una única fila
> >
> >
> >
> > Hola
> >
> >
> >
> > Consulto por un problema que no consigo resolver.
> >
> >
> >
> > Tengo un dataframe con muchas columnas todas de texto. Cada columna tiene
> >
> > solamente un valor válido y el resto son NAs. También cada fila tiene un
> >
> > único valor válido. Quiero colapsar ese data frame en uno que tenga
> >
> > solamente una fila y todas las columnas. Intenté con loops, while,
> apply y
> >
> > otros parecidos pero no lo logro
> >
> >
> >
> > El ejemplo del data frame sería así:
> >
> > V1 V2 V3
> >
> > a33 <NA> 10-04
> >
> > <NA> <NA> <NA>
> >
> > <NA> d52725 <NA>
> >
> > <NA> <NA> <NA>
> >
> >
> >
> > Y quiero lograr algo así
> >
> >
> >
> > V1 V2 V3
> >
> > a33 d52725 10-04
> >
> >
> >
> > Mi script es así:
> >
> >
> >
> > Nombre.1<-colnames(df0) #df0 es el dataframe que obtengo con NA
> >
> >
> >
> > df<-data.frame(1) #inicio un nuevo data frame con una variable sin
> nombre y
> >
> > valor 1
> >
> >
> >
> >
> >
> > for (i in Nombre.1)
> >
> > {merge(df, subset(paste("df0$",i,sep=''),!is.na
> (paste("df0$",i,sep=''))
> > ))}
> >
> > #el loop
> >
> >
> >
> > Cualquier ayuda será apreciada
> >
> >
> >
> > --
> >
> > Oscar Benitez
> >
> >
> >
> > [[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
> >
> >
> >
>
>
>
> --
> Oscar Benitez
>
> [[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]]
Más información sobre la lista de distribución R-help-es