La verad es que es un asolución sencilla pero muy eficaz. Ya con esta siguiente duda termino: La matriz de cada csv es de 400x500, es decir, 400 filas y 500 columnas. Si quiero calcular la media de diferentes regiones del csv, por ejemplo la media de las 20 primeras filas y 20 primreas columnas, pero del que tiene los 50.000 registros, tomando el valor 1, como pued hacerlo?? He probado con tapply(datos,new,mean,na.rm=T) pero a parte de darme error no segmenta como quiero. Gracias Date: Tue, 17 Nov 2015 16:45:03 +0100 Subject: Re: [R-es] Borrar cada fila 400 From: cof en qualityexcellence.es To: j.para.fernandez en hotmail.com CC: cgb en datanalytics.com; r-help-es en r-project.org Hola, Esta es una forma:> DF <- data.frame(a=rnorm(1000)) > DF$new <- 1 + floor(1:nrow(DF) / 400) > unique(DF$new)[1] 1 2 3 Saludos, Carlos Ortega www.qualityexcellence.es El 17 de noviembre de 2015, 15:50, Jesús Para Fernández <j.para.fernandez en hotmail.com> escribió: Entiendo la logica pero no veo el como hacerlo. No se como implementar el 1+floor(1:nrow(datos)/400)) Gracias Jesús> Date: Tue, 17 Nov 2015 15:31:39 +0100> Subject: Re: [R-es] Borrar cada fila 400> From: cgb en datanalytics.com> To: j.para.fernandez en hotmail.com> CC: josea.bartolome en mineco.es; r-help-es en r-project.org>> 1 + floor(1:nrow(datos) / 400)>> Pura aritmética, de nuevo.>> Un saludo,>> Carlos J. Gil Bellosta> http://www.datanalytics.com>> El día 17 de noviembre de 2015, 15:28, Jesús Para Fernández> <j.para.fernandez en hotmail.com> escribió:> > Gracuas a todos!!!> >> > Por cierto, esta ya es de nota. Si quiero agregar una columna, y que cada 400 piezsa el valor se incremente en una unidad, es decir las 400 primeras, tendrian cada fila el valor 1. Las siguientes 400, 2, ....> >> > Lo he hecho con un for, pero va bastante lento:> > k<-1> > for(i in 1:length(datos[,1])){> >> > if(i%%400 == 0){k = k +1}> > datos[i,9] <- k;> >> > }> >> >> >> From: josea.bartolome en mineco.es> >> To: j.para.fernandez en hotmail.com; r-help-es en r-project.org> >> Subject: RE: [R-es] Borrar cada fila 400> >> Date: Tue, 17 Nov 2015 14:22:14 +0000> >>> >> Prueba con:> >>> >> Datos[-seq(from = 400, to=50000, by = 400), ]> >>> >> No necesitas un buche, para eliminar las filas.> >>> >> Un cordial saludo.> >>> >> -----Mensaje original-----> >> De: R-help-es [mailto:r-help-es-bounces en r-project.org] En nombre de Jesús Para Fernández> >> Enviado el: Tuesday, November 17, 2015 3:15 PM> >> Para: r-help-es en r-project.org> >> Asunto: [R-es] Borrar cada fila 400> >>> >> Buenas, tengo un csv [csv final] con 50000 filas, que es uni?n de varios csv [csv particular].> >>> >> Cada csv [csv particular] tiene en la ?ltima fila, la 400, una serie de valores que quiero eliminar, por lo que del [csv filan] quiero borrar la linea 400,800,1200,....> >>> >>> >> Lo he intentado con un bucle for:> >>> >> for(i in 1:50000){> >> if(i%%400 == 0) {datos[-i,]}> >> }> >>> >>> >> Pero no me funciona. Adem?s me han dicho que con apply puede ser mucho m?s eficiente el algoritmo. ?Alguna idea?> >>> >> Gracias> >>> >>> >> [[alternative HTML version deleted]]> >>> >> > [[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[[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]]
Hola, Esta es una forma. Indicas con unos indices el trozo que quieres, lo seleccionas (df_df_reg) y sobre él calculas medias por fila o por columna. R tiene funciones específicas para este cálculo. #--------------------------- n_row <- 400 n_col <- 500 df_mat <- matrix(rnorm(n_row * n_col), nrow=n_row, ncol=n_col) df_df <- as.data.frame(df_mat) n_row_ini <- 1 n_row_end <- 20 n_col_ini <- 1 n_col_end <- 20 df_df_reg <- df_df[n_row_ini:n_row_end, n_col_ini:n_col_end ] colMeans ( df_df_reg, na.rm=TRUE ) rowMeans ( df_df_reg, na.rm=TRUE ) #--------------------------- Saludos, Carlos Ortega www.qualityexcellence.es El 17 de noviembre de 2015, 18:20, Jesús Para Fernández < j.para.fernandez en hotmail.com> escribió:> La verad es que es un asolución sencilla pero muy eficaz. > > Ya con esta siguiente duda termino: > > La matriz de cada csv es de 400x500, es decir, 400 filas y 500 columnas. > Si quiero calcular la media de diferentes regiones del csv, por ejemplo la > media de las 20 primeras filas y 20 primreas columnas, pero del que tiene > los 50.000 registros, tomando el valor 1, como pued hacerlo?? > > He probado con tapply(datos,new,mean,na.rm=T) pero a parte de darme error > no segmenta como quiero. > > Gracias > > ------------------------------ > Date: Tue, 17 Nov 2015 16:45:03 +0100 > Subject: Re: [R-es] Borrar cada fila 400 > From: cof en qualityexcellence.es > To: j.para.fernandez en hotmail.com > CC: cgb en datanalytics.com; r-help-es en r-project.org > > > Hola, > > Esta es una forma: > > > DF <- data.frame(a=rnorm(1000)) > > DF$new <- 1 + floor(1:nrow(DF) / 400) > > unique(DF$new) > [1] 1 2 3 > > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > > El 17 de noviembre de 2015, 15:50, Jesús Para Fernández < > j.para.fernandez en hotmail.com> escribió: > > Entiendo la logica pero no veo el como hacerlo. > > No se como implementar el 1+floor(1:nrow(datos)/400)) > > Gracias > Jesús > > > Date: Tue, 17 Nov 2015 15:31:39 +0100 > > Subject: Re: [R-es] Borrar cada fila 400 > > From: cgb en datanalytics.com > > To: j.para.fernandez en hotmail.com > > CC: josea.bartolome en mineco.es; r-help-es en r-project.org > > > > 1 + floor(1:nrow(datos) / 400) > > > > Pura aritmética, de nuevo. > > > > Un saludo, > > > > Carlos J. Gil Bellosta > > http://www.datanalytics.com > > > > El día 17 de noviembre de 2015, 15:28, Jesús Para Fernández > > <j.para.fernandez en hotmail.com> escribió: > > > Gracuas a todos!!! > > > > > > Por cierto, esta ya es de nota. Si quiero agregar una columna, y que > cada 400 piezsa el valor se incremente en una unidad, es decir las 400 > primeras, tendrian cada fila el valor 1. Las siguientes 400, 2, .... > > > > > > Lo he hecho con un for, pero va bastante lento: > > > k<-1 > > > for(i in 1:length(datos[,1])){ > > > > > > if(i%%400 == 0){k = k +1} > > > datos[i,9] <- k; > > > > > > } > > > > > > > > >> From: josea.bartolome en mineco.es > > >> To: j.para.fernandez en hotmail.com; r-help-es en r-project.org > > >> Subject: RE: [R-es] Borrar cada fila 400 > > >> Date: Tue, 17 Nov 2015 14:22:14 +0000 > > >> > > >> Prueba con: > > >> > > >> Datos[-seq(from = 400, to=50000, by = 400), ] > > >> > > >> No necesitas un buche, para eliminar las filas. > > >> > > >> Un cordial saludo. > > >> > > >> -----Mensaje original----- > > >> De: R-help-es [mailto:r-help-es-bounces en r-project.org] En nombre de > Jesús Para Fernández > > >> Enviado el: Tuesday, November 17, 2015 3:15 PM > > >> Para: r-help-es en r-project.org > > >> Asunto: [R-es] Borrar cada fila 400 > > >> > > >> Buenas, tengo un csv [csv final] con 50000 filas, que es uni?n de > varios csv [csv particular]. > > >> > > >> Cada csv [csv particular] tiene en la ?ltima fila, la 400, una serie > de valores que quiero eliminar, por lo que del [csv filan] quiero borrar la > linea 400,800,1200,.... > > >> > > >> > > >> Lo he intentado con un bucle for: > > >> > > >> for(i in 1:50000){ > > >> if(i%%400 == 0) {datos[-i,]} > > >> } > > >> > > >> > > >> Pero no me funciona. Adem?s me han dicho que con apply puede ser > mucho m?s eficiente el algoritmo. ?Alguna idea? > > >> > > >> Gracias > > >> > > >> > > >> [[alternative HTML version deleted]] > > >> > > > > > > [[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 > > [[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 >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Gracias Carlos una vez más, pero no es exactamente lo que quiero Con colMeans estas calculando por columnas, pero yo quiero que calcule asi: mean(datos[1:20,1:20]), pero claro, para toda la secuencia. mean(datos[1:20,1:20]) me devuelve el error-> Error in datos[1:2, 1:2] : object of type 'closure' is not subsettable Date: Tue, 17 Nov 2015 18:34:59 +0100 Subject: Re: [R-es] Borrar cada fila 400 From: cof en qualityexcellence.es To: j.para.fernandez en hotmail.com CC: cgb en datanalytics.com; r-help-es en r-project.org Hola, Esta es una forma. Indicas con unos indices el trozo que quieres, lo seleccionas (df_df_reg) y sobre él calculas medias por fila o por columna. R tiene funciones específicas para este cálculo. #--------------------------- n_row <- 400 n_col <- 500 df_mat <- matrix(rnorm(n_row * n_col), nrow=n_row, ncol=n_col) df_df <- as.data.frame(df_mat) n_row_ini <- 1 n_row_end <- 20 n_col_ini <- 1 n_col_end <- 20 df_df_reg <- df_df[n_row_ini:n_row_end, n_col_ini:n_col_end ] colMeans ( df_df_reg, na.rm=TRUE ) rowMeans ( df_df_reg, na.rm=TRUE ) #--------------------------- Saludos, Carlos Ortega www.qualityexcellence.es El 17 de noviembre de 2015, 18:20, Jesús Para Fernández <j.para.fernandez en hotmail.com> escribió: La verad es que es un asolución sencilla pero muy eficaz. Ya con esta siguiente duda termino: La matriz de cada csv es de 400x500, es decir, 400 filas y 500 columnas. Si quiero calcular la media de diferentes regiones del csv, por ejemplo la media de las 20 primeras filas y 20 primreas columnas, pero del que tiene los 50.000 registros, tomando el valor 1, como pued hacerlo?? He probado con tapply(datos,new,mean,na.rm=T) pero a parte de darme error no segmenta como quiero. Gracias Date: Tue, 17 Nov 2015 16:45:03 +0100 Subject: Re: [R-es] Borrar cada fila 400 From: cof en qualityexcellence.es To: j.para.fernandez en hotmail.com CC: cgb en datanalytics.com; r-help-es en r-project.org Hola, Esta es una forma:> DF <- data.frame(a=rnorm(1000)) > DF$new <- 1 + floor(1:nrow(DF) / 400) > unique(DF$new)[1] 1 2 3 Saludos, Carlos Ortega www.qualityexcellence.es El 17 de noviembre de 2015, 15:50, Jesús Para Fernández <j.para.fernandez en hotmail.com> escribió: Entiendo la logica pero no veo el como hacerlo. No se como implementar el 1+floor(1:nrow(datos)/400)) Gracias Jesús> Date: Tue, 17 Nov 2015 15:31:39 +0100> Subject: Re: [R-es] Borrar cada fila 400> From: cgb en datanalytics.com> To: j.para.fernandez en hotmail.com> CC: josea.bartolome en mineco.es; r-help-es en r-project.org>> 1 + floor(1:nrow(datos) / 400)>> Pura aritmética, de nuevo.>> Un saludo,>> Carlos J. Gil Bellosta> http://www.datanalytics.com>> El día 17 de noviembre de 2015, 15:28, Jesús Para Fernández> <j.para.fernandez en hotmail.com> escribió:> > Gracuas a todos!!!> >> > Por cierto, esta ya es de nota. Si quiero agregar una columna, y que cada 400 piezsa el valor se incremente en una unidad, es decir las 400 primeras, tendrian cada fila el valor 1. Las siguientes 400, 2, ....> >> > Lo he hecho con un for, pero va bastante lento:> > k<-1> > for(i in 1:length(datos[,1])){> >> > if(i%%400 == 0){k = k +1}> > datos[i,9] <- k;> >> > }> >> >> >> From: josea.bartolome en mineco.es> >> To: j.para.fernandez en hotmail.com; r-help-es en r-project.org> >> Subject: RE: [R-es] Borrar cada fila 400> >> Date: Tue, 17 Nov 2015 14:22:14 +0000> >>> >> Prueba con:> >>> >> Datos[-seq(from = 400, to=50000, by = 400), ]> >>> >> No necesitas un buche, para eliminar las filas.> >>> >> Un cordial saludo.> >>> >> -----Mensaje original-----> >> De: R-help-es [mailto:r-help-es-bounces en r-project.org] En nombre de Jesús Para Fernández> >> Enviado el: Tuesday, November 17, 2015 3:15 PM> >> Para: r-help-es en r-project.org> >> Asunto: [R-es] Borrar cada fila 400> >>> >> Buenas, tengo un csv [csv final] con 50000 filas, que es uni?n de varios csv [csv particular].> >>> >> Cada csv [csv particular] tiene en la ?ltima fila, la 400, una serie de valores que quiero eliminar, por lo que del [csv filan] quiero borrar la linea 400,800,1200,....> >>> >>> >> Lo he intentado con un bucle for:> >>> >> for(i in 1:50000){> >> if(i%%400 == 0) {datos[-i,]}> >> }> >>> >>> >> Pero no me funciona. Adem?s me han dicho que con apply puede ser mucho m?s eficiente el algoritmo. ?Alguna idea?> >>> >> Gracias> >>> >>> >> [[alternative HTML version deleted]]> >>> >> > [[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[[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 -- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]