2014-03-30 34 views
1

我有一個大的數據集是這樣的:複製行,但有一些修改

SUB SMOKE AMT MDV ADDL II EVID 
1 0 0 0 0 0 0 
1 0 20 0 16 24 1 
1 0 0 0 0 0 0 
1 0 0 0 0 0 0 
2 1 0 0 0 0 0 
2 1 50 0 24 12 1 
2 1 0 0 0 0 0 
2 1 0 0 0 0 0 
... 

我要複製的行那裏EVID=1和下方插入,但對於複製行,AMTADDLIIEVID應該都等於0,SMOKEMDV保持不變。預期的輸出應該是這樣的:

SUB SMOKE AMT MDV ADDL II EVID 
1 0 0 0 0 0 0 
1 0 20 0 16 24 1 
1 0 0 0 0 0 0 
1 0 0 0 0 0 0 
1 0 0 0 0 0 0 
2 1 0 0 0 0 0 
2 1 50 0 24 12 1 
2 1 0 0 0 0 0 
2 1 0 0 0 0 0 
2 1 0 0 0 0 0 
... 

有沒有人有關於實現這一點的想法?

回答

3
# repeat EVID=0 rows 1 time and EVID=1 rows 2 times 
r <- rep(1:nrow(DF), DF$EVID + 1) 
DF2 <- DF[r, ] 

# insert zeros 
DF2[duplicated(r), c("AMT", "ADDL", "II", "EVID")] <- 0 

捐贈:

> DF2 
    SUB SMOKE AMT MDV ADDL II EVID 
1  1  0 0 0 0 0 0 
2  1  0 20 0 16 24 1 
2.1 1  0 0 0 0 0 0 
3  1  0 0 0 0 0 0 
4  1  0 0 0 0 0 0 
5  2  1 0 0 0 0 0 
6  2  1 50 0 24 12 1 
6.1 2  1 0 0 0 0 0 
7  2  1 0 0 0 0 0 
8  2  1 0 0 0 0 0 
+0

尼斯把戲'代表(1:nrow(DF),DF $ EVID + 1)' –

0

也許這:

> t2 <- t[t$EVID==1,] # t is your data.frame 
> t2[c("AMT","ADDL","II","EVID")] <- 0 
> t2 
    SUB SMOKE AMT MDV ADDL II EVID 
2 1  0 0 0 0 0 0 
6 2  1 0 0 0 0 0 
> rbind(t,t2) 
    SUB SMOKE AMT MDV ADDL II EVID 
1 1  0 0 0 0 0 0 
2 1  0 20 0 16 24 1 
3 1  0 0 0 0 0 0 
4 1  0 0 0 0 0 0 
5 2  1 0 0 0 0 0 
6 2  1 50 0 24 12 1 
7 2  1 0 0 0 0 0 
8 2  1 0 0 0 0 0 
21 1  0 0 0 0 0 0 # this row 
61 2  1 0 0 0 0 0 # and this one are new 
相關問題