[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