Hola, Por entender el problema:
id anio t_8a t_10a t_12a rankf8 rankf10 rankf12 1 1 100 220 220 *1* *1 1* 2 1 140 350 350 2 3 3 3 2 55 165 165 1 1 1 4 2 60 200 200 2 2 2 5 2 100 NA NA 3 4 4 6 3 NA 350 350 NA 2 2 - Entiendo bien que el "1" de rankf8 (en negrita negro) corresponde al 100 de t_8a que está en la primera fila de t_8a de la matriz pequeña - ¿Pero el "1" de rankf10 (negrita rojo) ?. La primera fila de t_10a en la matriz pequeña no es un 220 si no un 200. - Y algo parecido para el "1" de rankf12 (negrita azul). Hay que buscar un 220 en t_12a de la matriz pequeña... ¡Y no está en la primera fila!... -------Matriz Pequeña----- t_8a t_10a t_12a 1 100 200 200 2 50 150 150 3 NA 250 250 Con estas dudas no termino de entender la lógica a aplicar. Gracias, Carlos Ortega www.qualityexcellence.es El 19 de enero de 2017, 21:29, Rodrigo López Correa <[email protected]> escribió: > Hola tengo una tabla de tipo data.frame "datos" con la siguiente > estructura, simplificada en número de niveles por variable, para crear un > ejemplo más sencillo: > > id anio t_8a t_10a t_12a rankf8 rankf10 rankf12 > 1 1 100 220 220 NA NA NA > 2 1 140 350 350 NA NA NA > 3 2 55 165 165 NA NA NA > 4 2 60 200 200 NA NA NA > 5 2 100 NA NA NA NA NA > 6 3 NA 350 350 NA NA NA > > También tengo una matriz, "mat" con la siguiente estructura: > > t_8a t_10a t_12a > 1 100 200 200 > 2 50 150 150 > 3 NA 250 250 > > > > La columna rankf8 la quiero rellenar tomando como referencia valores de > t_8a en "datos" en relación al valor de t_8a en la matriz "mat" y según el > año que le corresponda (1, 2 o 3). > > Del mismo modo quiero rellenar los valores de rankf10 y rankf12 pero > tomando como referencia valores de t_10a en "datos" en relación al valor de > t_10a en la matriz "mat" y valores de t_12a en "datos" en relación al valor > de t_12a en la matriz "mat, y según el año que le corresponda (1, 2 o 3). > > *Mi objetivo es que quede la tabla "datos" con las columnas rankf8, rankf10 > y rankf12 completas según la condición del script:* > > id anio t_8a t_10a t_12a rankf8 rankf10 rankf12 > 1 1 100 220 220 1 1 1 > 2 1 140 350 350 2 3 3 > 3 2 55 165 165 1 1 1 > 4 2 60 200 200 2 2 2 > 5 2 100 NA NA 3 4 4 > 6 3 NA 350 350 NA 2 2 > > > > *Mi script es el siguiente:* > > datos<-data.frame(cbind(id,anireg_cod,t_8a,t_10a,t_12a, > rankf8,rankf10,rankf12)) > > datos<-data.table((datos),key="anireg_cod") > > datos[order(anireg_cod,decreasing=FALSE),] > > anio<-sort((unique(datos$anireg_cod))) > > tiempo<-as.character(c("t_8a","t_10a","t_12a")) > > > mat<-matrix(c(100,50,NA,200,150,250,200,150,250),3,3) > colnames(mat)<-tiempo > rownames(mat)<-seq(1:length(sort(unique(datos$anireg_cod)))) > > anio<-sort((unique(datos$anireg_cod))) > > > rank<-as.character(c("rankf8","rankf10","rankf12")) > > for (k in 1:nrow(datos)){ > > #recorre variable anio > > for (i in anio){ > > for(j in tiempo){ > > for(l in rank){ > > ifelse(i==datos$anireg_cod & j %in% colnames(datos) & > (datos[k,l==colnames(datos)] > > <=mat[i==rownames(mat) > ,j==colnames(mat)]*0.1 + > mat[i==rownames(mat),j==colnames(mat)]), > datos[k,l %in% colnames(datos)]<-1, > > ifelse(i==datos$anireg_cod & j %in% colnames(datos) & > (datos[k,l %in% colnames(datos)]> > mat[i==rownames(mat),j==colnames(mat)]*0.1 + > mat[i==rownames(mat),j==colnames(mat)] & > (i==datos$anireg_cod & j %in% colnames(datos) & (datos[k,l %in% > colnames(datos)])))<= > > mat[i==rownames(mat), j==colnames(mat)]*0.5 + mat[i==rownames(mat), > j==colnames(mat)], > datos[k,l %in% colnames(datos)]<-2, > > ifelse(i==datos$anireg_cod & j %in% colnames(datos) & > (datos[k,l %in% colnames(datos)] & !is.na(datos[k,l %in% colnames(datos)]) > > > > mat[i==rownames(mat),j==colnames(mat)]*0.5), > datos[k,l %in% colnames(datos)] <-3, 4))) > } > } > > } > > > } > > > *El error que se genera es:* > > Error in `[<-.data.table`(`*tmp*`, k, l %in% colnames(datos), value = 1) : > > j must be vector of column name or positions > > > > In addition: Warning message: > > In i == datos$anireg_cod & j %in% colnames(datos) & (datos[k, l == : > > longer object length is not a multiple of shorter object length > > > > Muchas gracias y disculpas si quedó muy largo pero quería explicitar eel > problema lo mejor posible. > > > > Saludos, > > Rodrigo. > > > > > -- > *Dr. Rodrigo López Correa.* > > Montevideo. > Uruguay. > Cel: 099 660 549. > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > [email protected] > https://stat.ethz.ch/mailman/listinfo/r-help-es > -- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list [email protected] https://stat.ethz.ch/mailman/listinfo/r-help-es
