[R-es] Añadir nuevas filas en un data table
Olivier Nuñez
onunez en unex.es
Mar Oct 21 10:07:19 CEST 2014
Francisco,
aquí una posible solución:
> DT
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
> temp=DT[,list(start=start,dreg=year(start[1]):(year(end[1])-1),valor=valor,end=end),by=id]
> temp
id 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"))]
> temp
id 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);DT2
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
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
Más información sobre la lista de distribución R-help-es