2011-12-02 29 views
0

我正在嘗試爲我的面板數據添加額外的年數。只是想知道你們是否有任何快速的做法。請記住我的實際數據是T = 6,i = 4000。在面板數據中添加額外的觀察R

# Here is my input 
data = data.frame(time=c(30,40,50,30,40,50,30,40,50), 
        id=c(1,1,1,2,2,2,3,3,3), 
        d=c(1,4,7,8,14,2,41,11,61)) 
# declare panel data individ and time 
pd = pdata.frame(data, c("id","time"), drop.index=FALSE) 

#this is what I want out... 
data.out = data.frame(time=c(30,40,50,60,30,40,50,60,30,40,50,60), 
         id=c(1,1,1,1,2,2,2,2,3,3,3,3), 
         d=c(1,4,7,8,9,14,2,41,50,11,61,70)) 
# declare panel data individ and time 
pd.data.out = pdata.frame(data.out, c("id","time"), drop.index=FALSE)  

回答

0

了...只是創造新的時間和id data.frame和合並進去。

time = rep(c(unique(as.numeric(as.character(pd$time))),max(as.numeric(as.character(pd$time)))+10), length(unique(pd$id))) 
id = rep(unique(pd$id), each=max(as.numeric(as.character(pd$id)))+1) 
data2 = data.frame(time, id) 

data.out = merge(data2, pd, all.x=T) 
data.out = data.out[with(data.out, order(id,time)), ]  
2

我不太清楚你在做什麼,但是這可能幫助:

data = data.frame(time=c(30,40,50,30,40,50,30,40,50), 
        id=c(1,1,1,2,2,2,3,3,3), 
        d=c(1,4,7,8,14,2,41,11,61)) 
newdata = data.frame(time=c(60,60,60), 
        id=c(1,2,3), 
        d=c(9,50,70)) 
combodata = rbind(data,newdata) 
data.out = combodata[order(combodata$id,combodata$time), ] 
rownames(data.out) = NULL 

生產

> data.out 
    time id d 
1 30 1 1 
2 40 1 4 
3 50 1 7 
4 60 1 9 
5 30 2 8 
6 40 2 14 
7 50 2 2 
8 60 2 50 
9 30 3 41 
10 40 3 11 
11 50 3 61 
12 60 3 70 

,我認爲這是你想要什麼timeid,儘管d略有不同。如果行不需要進行再訂購的最後三行代碼可以濃縮到

data.out = rbind(data,newdata)