Hola, Para la primera parte (seleccionar los valores más altos de una variable) yo usaría dplyr::slice_max(). Creo que eso debería ser rápido y con el filtro hecho lo demás debería ser trivial. Si he entendido bien el problema.
Un saludo, Emilio > El 13 dic 2020, a las 15:31, Carlos Santos <[email protected]> > escribió: > > Perdón Carlos, con las prisas se me olvidó por completo añadir lo que > faltaba, tienes toda la razón > > Supongamos que tenemos esta matriz, se quiere conseguir para el mayor valor > por fila tomar el valor de la posición que ocupa la primera columna "Var" en > base a la columna elegida y si hay varios valores máximos iguales, entonces > ejecutar la función "f5" para elegir una y según valor máximo obtenido > proceder de la misma manera que antes. > > El problema es cuando tengo matrices de 3000x3000 o 10000x10000, y además los > dígitos de la columna primera son superiores al puesto en este ejemplo, > entonces el tiempo de calculo es excesivo. > > <image.png> > > codigo: > > f5 <- function(x){data1 %>% filter(Clus.Multi.OPTIMO %in% > c(EMISOR,RECEPTOR[x])) %>% > dplyr::select(1:numvar+1) %>% data.matrix() %>% CohenD()} > # > # > fila = 1 > rr = nrow(data2) > data1 <- data1 %>% mutate(Clus.Multi.OPTIMO=Clus.Multi.MAX) > # > repeat{ > smc <- > sum(data2[fila,((2+fila):(nrow(data2)+2))]==max(data2[fila,((2+fila):(nrow(data2)+2))])) > EMISOR <- data2[fila,1]$Var > RECEPTOR <- > data2[which(as.vector(t(data2[fila,])[,1])==max(data2[fila,((2+fila):(nrow(data2)+2))]))-2,1]$Var > Rmax <- RECEPTOR[mclapply((1:smc),f5) %>% unlist() %>% which.max()] > data1$Clus.Multi.OPTIMO[which(data1$Clus.Multi.MAX == data2[fila,1]$Var)] > <- Rmax > fila = fila + 1 > if (fila == rr) {break} > } > > > > > <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> > Libre de virus. www.avast.com > <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> > <x-msg://2/#m_-198326376745946536_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> > El dom, 13 dic 2020 a las 12:49, Carlos Ortega (<[email protected] > <mailto:[email protected]>>) escribió: > Hola, > > Mejor si pones un ejemplo de tu matriz y cuentas lo que quieres hacer... > El enfoque puede ser muy diferente al que has planteado. > > Gracias, > Calros Ortega > www.qualityexcellence.es <http://www.qualityexcellence.es/> > > El dom, 13 dic 2020 a las 12:33, Carlos Santos (<[email protected] > <mailto:[email protected]>>) escribió: > Buen dia, > > Tengo un problema cuando ejecuto la siguiente rutina, porque con una matriz > muy grande el tiempo de ejecución se va a bastantes horas. > > Cualquier idea para mejorarlo y reducir significativamente el tiempo, > estaría muy agradecido > > Muchas gracias por vuestra ayuda > > #_____________________________________________________________________________________ > > f5 <- function(x){data1 %>% filter(Clus.Multi.OPTIMO %in% > c(EMISOR,RECEPTOR[x])) %>% > dplyr::select(1:numvar+1) %>% data.matrix() %>% CohenD()} > > # > ______________________________________________________________________________________ > > fila = 1 > rr = nrow(data2) > > repeat{ > smc <- > sum(data2[fila,((2+fila):(nrow(data2)+2))]==max(data2[fila,((2+fila):(nrow(data2)+2))])) > EMISOR <- data2[fila,1]$Var > RECEPTOR <- > data2[which(as.vector(t(data2[fila,])[,1])==max(data2[fila,((2+fila):(nrow(data2)+2))]))-2,1]$Var > > Rmax <- RECEPTOR[mclapply((1:smc),f5) %>% unlist() %>% which.max()] > > data1$Clus.Multi.OPTIMO[which(data1$Clus.Multi.MAX == > data2[fila,1]$Var)] <- Rmax > fila = fila + 1 > if (fila == rr) {break} > } > > <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail > > <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>> > Libre > de virus. www.avast.com <http://www.avast.com/> > <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail > > <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>> > <#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > [email protected] <mailto:[email protected]> > https://stat.ethz.ch/mailman/listinfo/r-help-es > <https://stat.ethz.ch/mailman/listinfo/r-help-es> > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es > <http://www.qualityexcellence.es/>_______________________________________________ > R-help-es mailing list > [email protected] > https://stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list [email protected] https://stat.ethz.ch/mailman/listinfo/r-help-es
