[R-es] Completar un for, que falla al faltarle algún dato.

Carlos Ortega cof @ending from qu@lityexcellence@e@
Dom Jul 8 01:54:17 CEST 2018


Hola,

Aparece un problema porque en en el primer subset (sdf) hay algunos valores
de K que no existen.
Una forma de "protegerse" es esta, incluyendo un "NA" cuando eso ocurre...



for (j in J){
  print(j)
  sdf <- subset(df.raw1, df.raw1$Ques==j)
  for(k in K){
    print(k)
    x <- sdf[which(sdf$Info==k), "Answ"]


* if(length(x) == 0) {       df.ok[k, j ] <- "NA"    } else { df.ok[k,j] <-
as.character(x) }*
  }
}

Saludos,
Carlos Ortega
www.qualityexcellence.es

El 8 de julio de 2018, 0:25, Juan Abasolo <juan.abasolo using ehu.eus> escribió:

> Buenas noches;
> Además del proyecto que comenté antes y con el que sigo discutiendo,
> también me estoy peleando con otro... con el que también tropiezo.
>
> Necesito reordenar los datos presentados en dos columnas a filas y
> columnas.
>
> Los datos ideales serían algo así:
>
> Ques <- c(rep("Q1",3),rep("Q2",3),rep("Q3",3))
> Info <- rep(c("aca", "ahi", "alla"),3)
> Answ <- c("casa", "bulo", "hogar", "mama", "mami", "vieja", "perro", "can",
> "rope")
>
> df.raw <- data.frame(ID, Ques, Info, Answ)
>
>
> Pero, como no son ideales, se parecen a esto:
>
> df.raw1 <- df.raw[-2,]
>
> # Necesito un dataframe con una estructura así:
>
> df.ok <- data.frame(matrix(ncol = length(levels(df.raw$Ques)), nrow =
> length(levels(df.raw$Info))))
>
> names(df.ok) <- levels(df.raw$Ques)
> rownames(df.ok) <- levels(df.raw$Info)
>
> # que incluya los datos de 'Answ' en donde correspondería
>
> J <- levels(df.raw$Ques)
> K <- levels(df.raw$Info)
>
> # El ideal me queda resuelto con esto:
>
> for (j in J){
>         sdf <- subset(df.raw, df.raw$Ques==j)
>         for(k in K){
>                 x <- sdf[which(sdf$Info==k), "Answ"]
>                 df.ok[k,j] <- as.character(x)
>         }
> }
>
> Pero si en la segunda linea sustituyo df.raw por df.raw1
>
> for (j in J){
>         sdf <- subset(df.raw1, df.raw1$Ques==j)
>         for(k in K){
>                 x <- sdf[which(sdf$Info==k), "Answ"]
>                 df.ok[k,j] <- as.character(x)
>         }
> }
>
> , ahí me da error.
>
> ¿Hay alguna forma de que asigne "" o NA o algo a quitar luego? O packete
> que haga el trabajo u orden para salvar lo que venía haciendo yo?
>
> Presupongo que será otra de esas respuestas evidentes, y disculpen lo largo
> de la exposición.
>
> Desde ya, muchas gracias
>
> --
> Juan Abasolo
>
> Hizkuntzaren eta Literaturaren Didaktika Saila
> Bilboko Hezkuntza Fakultatea
> Euskal Herriko Unibertsitatea
> UPV/EHU
>
> Sarriena auzoa z/g
> 48940 Leioa
> Bizkaia
>
>         [[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