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