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]]
Vale, con as.matrix lo consigo. es poner un mean(as.matrix(1:20,1:20)) y lo obtengo. Ahora lo bonito es como hacerlo para los valores que quiera, isn usar un bucle for, sino un apply, o un tapply...> From: j.para.fernandez en hotmail.com > To: cof en qualityexcellence.es > Date: Tue, 17 Nov 2015 19:17:30 +0100 > CC: r-help-es en r-project.org > Subject: Re: [R-es] Borrar cada fila 400 > > 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]] > > _______________________________________________ > 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]]
¿Qué quieres decir con "valores que quiera"?. ¿Quieres calcular la media de unas regiones de la matriz con algún tipo de patrón? ¿periodicidad? Si es que no, basta como te mostraba en el ejemplo, definir unos índices (tu 1 y 20) y ya está... Saludos, Carlos Ortega www.qualityexcellence.es El 17 de noviembre de 2015, 19:29, Jesús Para Fernández < j.para.fernandez en hotmail.com> escribió:> Vale, con as.matrix lo consigo. > > es poner un mean(as.matrix(1:20,1:20)) y lo obtengo. > > Ahora lo bonito es como hacerlo para los valores que quiera, isn usar un > bucle for, sino un apply, o un tapply... > > > From: j.para.fernandez en hotmail.com > > To: cof en qualityexcellence.es > > Date: Tue, 17 Nov 2015 19:17:30 +0100 > > CC: r-help-es en r-project.org > > Subject: Re: [R-es] Borrar cada fila 400 > > > > 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]] > > > > _______________________________________________ > > 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]]