Rodrigo López Correa
2015-Sep-25 13:48 UTC
[R-es] Error al agrupar datos por una variable en data.table
Hola buenos días, estoy teniendo problemas cuando quiero agrupar los registros de una tabla por una columna específica en data.table. *Mi objetivo es agrupar todos los hijos que pertenecen a solo 2 padres determinados.* - Por eso me traje todos sus hijos con subset desde una tabla. algunos_padres<-data.table(subset(mydata, padres %in% c("0002480", "0001878") , select=(c(individuo,padres)),key="individuo")) - Para chequear que me haya traído solamente esos padres, busqué si tenía el padre ?0001458?: algunos_padres[padres=="0001458",] - El resultado fue el esperado, no estaba en la tabla algunos_padres: Empty data.table (0 rows) of 7 cols #correct no era esperado - Sin embargo, acá viene mi problema, cuando le pido contabilizar el número de hijos obtenidos por cada uno de esos 2 padres, el resultado trajo también animales que no deberían estar. Por ejemplo, el padre 0001458. total_hijos<-algunos_padres[, as.data.table(table(padres))] head (total_hijos) padres N 1: 0001458 0 2: 0001512 0 3: 0001518 0 4: 0001519 0 ?. - Intenté hacerlo de otra manera y obtuve igual resultado: xtabs(~padres,data=algunos_padres) padres 0001458 0001512 0001518 0001519 0001683 0001795 0001803 0001878 0 0 0 0 0 0 0 77 ?. - En definitiva, intenté hacerlo de varias maneras y siempre con el mismo resultado, me trae en la estadística padres que no formaron parte de mi subset inicial en algunos_padres, por más que después aparezcan con 0 hijo en el resultado. - Por último probé: algunos_padres[,count := uniqueN(individuo), by=padres] pero aquí no me trajo como quiero en 2 lineas, el total de hijos de cada uno de esos 2 padres. Quizás es redundante poner uniqueN, ya que el campo individuo tiene registros únicos. ¿Me podrían ayudar? Muchas gracias! Rodrigo. [[alternative HTML version deleted]]
Olivier Nuñez
2015-Sep-28 07:17 UTC
[R-es] Error al agrupar datos por una variable en data.table
No estoy seguro de entender, pero prueba:> require(data.table) > DT=data.table(padres=c(1,1,1,2,2), indiviudos=1:5) > DTpadres indiviudos 1: 1 1 2: 1 2 3: 1 3 4: 2 4 5: 2 5> DT[,.(count=.N),by=padres]padres count 1: 1 3 2: 2 2>algunos_padres[,count := .N, by=padres] ----- Mensaje original ----- De: "Rodrigo López Correa" <rod99hare en gmail.com> Para: "R-help-es" <r-help-es en r-project.org> Enviados: Viernes, 25 de Septiembre 2015 15:48:39 Asunto: [R-es] Error al agrupar datos por una variable en data.table Hola buenos días, estoy teniendo problemas cuando quiero agrupar los registros de una tabla por una columna específica en data.table. *Mi objetivo es agrupar todos los hijos que pertenecen a solo 2 padres determinados.* - Por eso me traje todos sus hijos con subset desde una tabla. algunos_padres<-data.table(subset(mydata, padres %in% c("0002480", "0001878") , select=(c(individuo,padres)),key="individuo")) - Para chequear que me haya traído solamente esos padres, busqué si tenía el padre ?0001458?: algunos_padres[padres=="0001458",] - El resultado fue el esperado, no estaba en la tabla algunos_padres: Empty data.table (0 rows) of 7 cols #correct no era esperado - Sin embargo, acá viene mi problema, cuando le pido contabilizar el número de hijos obtenidos por cada uno de esos 2 padres, el resultado trajo también animales que no deberían estar. Por ejemplo, el padre 0001458. total_hijos<-algunos_padres[, as.data.table(table(padres))] head (total_hijos) padres N 1: 0001458 0 2: 0001512 0 3: 0001518 0 4: 0001519 0 ?. - Intenté hacerlo de otra manera y obtuve igual resultado: xtabs(~padres,data=algunos_padres) padres 0001458 0001512 0001518 0001519 0001683 0001795 0001803 0001878 0 0 0 0 0 0 0 77 ?. - En definitiva, intenté hacerlo de varias maneras y siempre con el mismo resultado, me trae en la estadística padres que no formaron parte de mi subset inicial en algunos_padres, por más que después aparezcan con 0 hijo en el resultado. - Por último probé: algunos_padres[,count := uniqueN(individuo), by=padres] pero aquí no me trajo como quiero en 2 lineas, el total de hijos de cada uno de esos 2 padres. Quizás es redundante poner uniqueN, ya que el campo individuo tiene registros únicos. ¿Me podrían ayudar? Muchas gracias! Rodrigo. [[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
Olivier Nuñez
2015-Sep-28 07:29 UTC
[R-es] Error al agrupar datos por una variable en data.table (2)
Ya entiendo tu problema. A pesar del subset, los niveles originales del factor "padres" siguen en el data.table. En cualquier caso, el comando .N no se deja afectar por este recuerdo:> DT=data.table(padres=factor(c(1,1,1,2,2,3,3)), individuos=1:7) > DT0=subset(DT,padres %in% c(1:2)) > DT0padres individuos 1: 1 1 2: 1 2 3: 1 3 4: 2 4 5: 2 5> summary(DT0)padres individuos 1:3 Min. :1 2:2 1st Qu.:2 3:0 Median :3 Mean :3 3rd Qu.:4 Max. :5> DT[,.(count=.N),by=padres]padres count 1: 1 3 2: 2 2 3: 3 2> DT0[,.(count=.N),by=padres]padres count 1: 1 3 2: 2 2>----- Mensaje original ----- De: "Rodrigo López Correa" <rod99hare en gmail.com> Para: "R-help-es" <r-help-es en r-project.org> Enviados: Viernes, 25 de Septiembre 2015 15:48:39 Asunto: [R-es] Error al agrupar datos por una variable en data.table Hola buenos días, estoy teniendo problemas cuando quiero agrupar los registros de una tabla por una columna específica en data.table. *Mi objetivo es agrupar todos los hijos que pertenecen a solo 2 padres determinados.* - Por eso me traje todos sus hijos con subset desde una tabla. algunos_padres<-data.table(subset(mydata, padres %in% c("0002480", "0001878") , select=(c(individuo,padres)),key="individuo")) - Para chequear que me haya traído solamente esos padres, busqué si tenía el padre ?0001458?: algunos_padres[padres=="0001458",] - El resultado fue el esperado, no estaba en la tabla algunos_padres: Empty data.table (0 rows) of 7 cols #correct no era esperado - Sin embargo, acá viene mi problema, cuando le pido contabilizar el número de hijos obtenidos por cada uno de esos 2 padres, el resultado trajo también animales que no deberían estar. Por ejemplo, el padre 0001458. total_hijos<-algunos_padres[, as.data.table(table(padres))] head (total_hijos) padres N 1: 0001458 0 2: 0001512 0 3: 0001518 0 4: 0001519 0 ?. - Intenté hacerlo de otra manera y obtuve igual resultado: xtabs(~padres,data=algunos_padres) padres 0001458 0001512 0001518 0001519 0001683 0001795 0001803 0001878 0 0 0 0 0 0 0 77 ?. - En definitiva, intenté hacerlo de varias maneras y siempre con el mismo resultado, me trae en la estadística padres que no formaron parte de mi subset inicial en algunos_padres, por más que después aparezcan con 0 hijo en el resultado. - Por último probé: algunos_padres[,count := uniqueN(individuo), by=padres] pero aquí no me trajo como quiero en 2 lineas, el total de hijos de cada uno de esos 2 padres. Quizás es redundante poner uniqueN, ya que el campo individuo tiene registros únicos. ¿Me podrían ayudar? Muchas gracias! Rodrigo. [[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
Rodrigo López Correa
2015-Oct-02 11:38 UTC
[R-es] Error al agrupar datos por una variable en data.table (2)
Gracias Olivier! es exacto eso que tú mencionas el problema que tenía. Saludos, Rodrigo. El 28 de septiembre de 2015, 4:29, Olivier Nuñez <onunez en unex.es> escribió:> Ya entiendo tu problema. > A pesar del subset, los niveles originales del factor "padres" siguen en > el data.table. > En cualquier caso, el comando .N no se deja afectar por este recuerdo: > > > DT=data.table(padres=factor(c(1,1,1,2,2,3,3)), individuos=1:7) > > DT0=subset(DT,padres %in% c(1:2)) > > DT0 > padres individuos > 1: 1 1 > 2: 1 2 > 3: 1 3 > 4: 2 4 > 5: 2 5 > > summary(DT0) > padres individuos > 1:3 Min. :1 > 2:2 1st Qu.:2 > 3:0 Median :3 > Mean :3 > 3rd Qu.:4 > Max. :5 > > DT[,.(count=.N),by=padres] > padres count > 1: 1 3 > 2: 2 2 > 3: 3 2 > > DT0[,.(count=.N),by=padres] > padres count > 1: 1 3 > 2: 2 2 > > > > > > > ----- Mensaje original ----- > De: "Rodrigo López Correa" <rod99hare en gmail.com> > Para: "R-help-es" <r-help-es en r-project.org> > Enviados: Viernes, 25 de Septiembre 2015 15:48:39 > Asunto: [R-es] Error al agrupar datos por una variable en data.table > > Hola buenos días, estoy teniendo problemas cuando quiero agrupar los > registros de una tabla por una columna específica en data.table. > > > > *Mi objetivo es agrupar todos los hijos que pertenecen a solo 2 padres > determinados.* > > > > - Por eso me traje todos sus hijos con subset desde una tabla. > > > > > > algunos_padres<-data.table(subset(mydata, padres %in% c("0002480", > "0001878") , > > select=(c(individuo,padres)),key="individuo")) > > > > > - Para chequear que me haya traído solamente esos padres, busqué si > tenía el padre ?0001458?: > > > > algunos_padres[padres=="0001458",] > > > > > - El resultado fue el esperado, no estaba en la tabla algunos_padres: > > > Empty data.table (0 rows) of 7 cols #correct no era esperado > > > > > - Sin embargo, acá viene mi problema, cuando le pido contabilizar el > número de hijos obtenidos por cada uno de esos 2 padres, el resultado > trajo también animales que no deberían estar. Por ejemplo, el padre > 0001458. > > > > total_hijos<-algunos_padres[, as.data.table(table(padres))] > > head (total_hijos) > > > > padres N > > 1: 0001458 0 > > 2: 0001512 0 > > 3: 0001518 0 > > 4: 0001519 0 > > ?. > > > > > - Intenté hacerlo de otra manera y obtuve igual resultado: > > > > xtabs(~padres,data=algunos_padres) > > > > padres > > 0001458 0001512 0001518 0001519 0001683 0001795 0001803 > 0001878 > > 0 0 0 0 > 0 0 0 77 ?. > > > > > > > - En definitiva, intenté hacerlo de varias maneras y siempre con el > mismo resultado, me trae en la estadística padres que no formaron > parte de > mi subset inicial en algunos_padres, por más que después aparezcan con 0 > hijo en el resultado. > > > > > > > - Por último probé: > > > > algunos_padres[,count := uniqueN(individuo), by=padres] > > > > pero aquí no me trajo como quiero en 2 lineas, el total de hijos de cada > uno de esos 2 padres. Quizás es redundante poner uniqueN, ya que el campo > individuo tiene registros únicos. > > > > > > > > ¿Me podrían ayudar? Muchas gracias! > > > > Rodrigo. > > [[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 >-- *Dr. Rodrigo López Correa.* Miguel Barreiro 3186. Montevideo. Uruguay. Cel: 099 660 549. [[alternative HTML version deleted]]