Buenas tardes a todo el mundo, El motivo de que me dirija al foro es que no sé cómo añadir unas determinadas filas en un data table de una forma eficaz y según el identificador de sujeto. Además, quisiera hacerlo sin tener que recurrir a ningún paquete de R adicional del tipo plyr, dplyr, etc. (no sé si esto es posible). EJEMPLO: require(data.table) DT <- data.table( id = rep(c(1,8,17),c(2,2,1)), start as.Date(rep(c('2005-02-27','2006-07-17','2005-05-30'),c(2,2,1))), dreg as.Date(c('2006-04-20','2007-02-19','2008-01-15','2008-01-29','2006-02-05')), valor = rep(c(24,15,32),c(2,2,1)), end = as.Date(rep(c('2007-05-15','2008-02-05','2007-12-31'),c(2,2,1))) ) id start dreg valor end 1: 1 2005-02-27 2006-04-20 24 2007-05-15 2: 1 2005-02-27 2007-02-19 24 2007-05-15 3: 8 2006-07-17 2008-01-15 15 2008-02-05 4: 8 2006-07-17 2008-01-29 15 2008-02-05 5: 17 2005-05-30 2006-02-05 32 2007-12-31 Mi objetivo es crear un Nuevo data table tal que en cada “id” se añadan tantas filas como días de fin de año tengan comprendidos entre sus respectivas variables start y end: id start dreg valor end 1: 1 2005-02-27 2005-12-31 24 2007-05-15 2: 1 2005-02-27 2006-04-20 24 2007-05-15 3: 1 2005-02-27 2006-12-31 24 2007-05-15 4: 1 2005-02-27 2007-02-19 24 2007-05-15 5: 8 2006-07-17 2006-12-31 15 2008-02-05 6: 8 2006-07-17 2007-12-31 15 2008-02-05 7: 8 2006-07-17 2008-01-15 15 2008-02-05 8: 8 2006-07-17 2008-01-29 15 2008-02-05 9: 17 2005-05-30 2005-12-31 32 2007-12-31 10: 17 2005-05-30 2006-02-05 32 2007-12-31 11: 17 2005-05-30 2006-12-31 32 2007-12-31 [[alternative HTML version deleted]]
Disculpas a todo el mundo por la calidad del mensaje, no sé que me pasa en el ordenador!! [[alternative HTML version deleted]]
"Marcuzzi, Javier Rubén"
2014-Oct-20 18:50 UTC
[R-es] Añadir nuevas filas en un data table
Estimado Francisco Javier No alcanlzo a leer su correo, pero por el asunto le sugiero ?rbind Javier Marcuzzi El 20/10/14 a las 15:19, Francisco Javier escibió:> Disculpas a todo el mundo por la calidad del mensaje, no s? que me pasa en el ordenador!! > > [[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]]
Francisco, aquí una posible solución:> DTid start dreg valor end 1: 1 2005-02-27 2006-04-20 24 2007-05-15 2: 1 2005-02-27 2007-02-19 24 2007-05-15 3: 8 2006-07-17 2008-01-15 15 2008-02-05 4: 8 2006-07-17 2008-01-29 15 2008-02-05 5: 17 2005-05-30 2006-02-05 32 2007-12-31> temp=DT[,list(start=start,dreg=year(start[1]):(year(end[1])-1),valor=valor,end=end),by=id] > tempid start dreg valor end 1: 1 2005-02-27 2005 24 2007-05-15 2: 1 2005-02-27 2006 24 2007-05-15 3: 8 2006-07-17 2006 15 2008-02-05 4: 8 2006-07-17 2007 15 2008-02-05 5: 17 2005-05-30 2005 32 2007-12-31 6: 17 2005-05-30 2006 32 2007-12-31> temp[,dreg:=as.Date(paste0(dreg,"-12-31"))] > tempid start dreg valor end 1: 1 2005-02-27 2005-12-31 24 2007-05-15 2: 1 2005-02-27 2006-12-31 24 2007-05-15 3: 8 2006-07-17 2006-12-31 15 2008-02-05 4: 8 2006-07-17 2007-12-31 15 2008-02-05 5: 17 2005-05-30 2005-12-31 32 2007-12-31 6: 17 2005-05-30 2006-12-31 32 2007-12-31> DT2=rbind(DT,temp);setkey(DT2,id,dreg);DT2id start dreg valor end 1: 1 2005-02-27 2005-12-31 24 2007-05-15 2: 1 2005-02-27 2006-04-20 24 2007-05-15 3: 1 2005-02-27 2006-12-31 24 2007-05-15 4: 1 2005-02-27 2007-02-19 24 2007-05-15 5: 8 2006-07-17 2006-12-31 15 2008-02-05 6: 8 2006-07-17 2007-12-31 15 2008-02-05 7: 8 2006-07-17 2008-01-15 15 2008-02-05 8: 8 2006-07-17 2008-01-29 15 2008-02-05 9: 17 2005-05-30 2005-12-31 32 2007-12-31 10: 17 2005-05-30 2006-02-05 32 2007-12-31 11: 17 2005-05-30 2006-12-31 32 2007-12-31 Un saludo. Olivier ----- Mensaje original ----- De: "Francisco Javier" <iterador10 en hotmail.com> Para: r-help-es en r-project.org Enviados: Lunes, 20 de Octubre 2014 20:17:56 Asunto: [R-es] Añadir nuevas filas en un data table Buenas tardes a todo el mundo, El motivo de que me dirija al foro es que no s? c?mo a?adir unas determinadas filas en un data table de una forma eficaz y seg?n el identificador de sujeto. Adem?s, quisiera hacerlo sin tener que recurrir a ning?n paquete de R adicional del tipo plyr, dplyr, etc. (no s? si esto es posible). EJEMPLO: require(data.table) DT <- data.table( id = rep(c(1,8,17),c(2,2,1)), start as.Date(rep(c('2005-02-27','2006-07-17','2005-05-30'),c(2,2,1))), dreg as.Date(c('2006-04-20','2007-02-19','2008-01-15','2008-01-29','2006-02-05')), valor = rep(c(24,15,32),c(2,2,1)), end = as.Date(rep(c('2007-05-15','2008-02-05','2007-12-31'),c(2,2,1))) ) id start dreg valor end 1: 1 2005-02-27 2006-04-20 24 2007-05-15 2: 1 2005-02-27 2007-02-19 24 2007-05-15 3: 8 2006-07-17 2008-01-15 15 2008-02-05 4: 8 2006-07-17 2008-01-29 15 2008-02-05 5: 17 2005-05-30 2006-02-05 32 2007-12-31 Mi objetivo es crear un Nuevo data table tal que en cada ?id? se a?adan tantas filas como d?as de fin de a?o tengan comprendidos entre sus respectivas variables start y end: id start dreg valor end 1: 1 2005-02-27 2005-12-31 24 2007-05-15 2: 1 2005-02-27 2006-04-20 24 2007-05-15 3: 1 2005-02-27 2006-12-31 24 2007-05-15 4: 1 2005-02-27 2007-02-19 24 2007-05-15 5: 8 2006-07-17 2006-12-31 15 2008-02-05 6: 8 2006-07-17 2007-12-31 15 2008-02-05 7: 8 2006-07-17 2008-01-15 15 2008-02-05 8: 8 2006-07-17 2008-01-29 15 2008-02-05 9: 17 2005-05-30 2005-12-31 32 2007-12-31 10: 17 2005-05-30 2006-02-05 32 2007-12-31 11: 17 2005-05-30 2006-12-31 32 2007-12-31 [[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