Buen día, Tengo un data frame con los siguientes datos> Sexo<-c(1,1,1,2,2,2,2,1) > edad<-c(10,12,15,12,10,15,12,15) > frec<-c(150,125,147,123,156,174,185,195) > df<-data.frame(Sexo,edad,frec)Quisiera saber como elaborar una tabla en la cual seleccione el sexo y la edad y R realice la suma de la frecuencia debido a que la lista original incluye miles de observaciones y existen muchas observaciones con mismo sexo, misma edad y es necesario realizar la suma de las frecuencias. Saludos y gracias [[alternative HTML version deleted]]
Javier Marcuzzi
2017-Jul-23 19:24 UTC
[R-es] Suma de columna en data.frame con restricciones
Estimado Clei Y Su pregunta es muy básica, está en muchos libros y hay muchas formas de resolverla. Le paso una pista donde se preguntan por lo mismo, no se desaliente, es una duda común al haber tantas formas para algo tan simple, incluso observe apply, mapply, plyr, dplyr, do.call, un algunas otras alternativas, cualquiera lo lleva a una respuesta para su caso. https://stackoverflow.com/questions/15059076/call-apply-like-function-on-each-row-of-dataframe-with-multiple-arguments-from-e Javier Rubén Marcuzzi De: Clei Y Enviado: domingo, 23 de julio de 2017 16:13 Para: r-help-es en r-project.org Asunto: [R-es] Suma de columna en data.frame con restricciones Buen d?a, Tengo un data frame con los siguientes datos> Sexo<-c(1,1,1,2,2,2,2,1) > edad<-c(10,12,15,12,10,15,12,15) > frec<-c(150,125,147,123,156,174,185,195) > df<-data.frame(Sexo,edad,frec)Quisiera saber como elaborar una tabla en la cual seleccione el sexo y la edad y R realice la suma de la frecuencia debido a que la lista original incluye miles de observaciones y existen muchas observaciones con mismo sexo, misma edad y es necesario realizar la suma de las frecuencias. Saludos y gracias [[alternative HTML version deleted]] [[alternative HTML version deleted]]
Carlos Ortega
2017-Jul-23 20:45 UTC
[R-es] Suma de columna en data.frame con restricciones
Hola, Esas son diferentes opciones. Si tu conjunto es muy grande, las opciones de dplyr, sqldf y especialmente data.table son por las que optaría... #-----------------------------------------> # Opcion 1 > aggregate(frec ~ edad + Sexo, data = df, FUN = sum)edad Sexo frec 1 10 1 150 2 12 1 125 3 15 1 342 4 10 2 156 5 12 2 308 6 15 2 174> > # Opcion 2 > library(dplyr) > res_out <- df %>%+ group_by(edad, Sexo) %>% + summarise( res = sum(frec))> res_out# A tibble: 6 x 3 # Groups: edad [?] edad Sexo res <dbl> <dbl> <dbl> 1 10 1 150 2 10 2 156 3 12 1 125 4 12 2 308 5 15 1 342 6 15 2 174> > # Opcion 3 > library(data.table) > DT <- as.data.table(df) > DT[, mi_sum := sum(frec), by=c('Sexo','edad')] > DTSexo edad frec mi_sum 1: 1 10 150 150 2: 1 12 125 125 3: 1 15 147 342 4: 2 12 123 308 5: 2 10 156 156 6: 2 15 174 174 7: 2 12 185 308 8: 1 15 195 342> > # Opcion 4 > library(sqldf) > res_sql <- sqldf("select Sexo, edad, sum(frec) as sumfrec from df groupby Sexo,edad")> res_sqlSexo edad sumfrec 1 1 10 150 2 1 12 125 3 1 15 342 4 2 10 156 5 2 12 308 6 2 15 174>#----------------------------------------- Saludos, Carlos Ortega www.qualityexcellence.es El 23 de julio de 2017, 21:13, Clei Y <cleiver_yam en hotmail.com> escribió:> Buen día, > > > Tengo un data frame con los siguientes datos > > > > > > Sexo<-c(1,1,1,2,2,2,2,1) > > edad<-c(10,12,15,12,10,15,12,15) > > frec<-c(150,125,147,123,156,174,185,195) > > df<-data.frame(Sexo,edad,frec) > > > Quisiera saber como elaborar una tabla en la cual seleccione el sexo y la > edad y R realice la suma de la frecuencia debido a que la lista original > incluye miles de observaciones y existen muchas observaciones con mismo > sexo, misma edad y es necesario realizar la suma de las frecuencias. > > > Saludos y gracias > > [[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]]