2014-09-19 35 views
-1

我有以下數據幀:複製數據幀用於第二主體ID

ID TIME AMT A1 A2 DV 
1 0 100 100 0 NA 
1 1 0 NA NA NA 
1 2 0 NA NA NA 
1 3 0 NA NA NA 
1 4 100 NA NA NA 
1 5 0 NA NA NA 
1 6 0 NA NA NA 
1 6 0 NA NA NA 
1 7 0 NA NA NA 

是否有R A方式,我可以複製,但改變ID爲ID = 2。結果應該是這樣的:

ID TIME AMT A1 A2 DV 
1 0 100 100 0 NA 
1 1 0 NA NA NA 
1 2 0 NA NA NA 
1 3 0 NA NA NA 
1 4 100 NA NA NA 
1 5 0 NA NA NA 
1 6 0 NA NA NA 
1 6 0 NA NA NA 
1 7 0 NA NA NA 
2 0 100 100 0 NA 
2 1 0 NA NA NA 
2 2 0 NA NA NA 
2 3 0 NA NA NA 
2 4 100 NA NA NA 
2 5 0 NA NA NA 
2 6 0 NA NA NA 
2 6 0 NA NA NA 
2 7 0 NA NA NA 

提前致謝!

回答

2

索引+ transform

transform(dat[rep(rownames(dat),2),], ID = rep(1:2,each=nrow(dat))) 

或者作爲功能:

rep.and.count <- function(x,n) { 
    transform(x[rep(rownames(x),n),], ID = rep(seq_len(n),each=nrow(x))) 
} 
rep.and.count(dat,2) 

即使有很小的da,速度也會快很多TA。

ids <- 1:15000 
system.time({do.call(rbind, lapply(ids, function(id) { 
    new.dat <- dat 
    new.dat$ID <- id 
    return(new.dat) 
}))}) 

# user system elapsed 
# 8.61 0.03 8.78 

system.time(rep.and.count(dat,15000)) 

# user system elapsed 
# 0.13 0.00 0.13 
+0

謝謝。但是這個函數並沒有給出相關數據的新ID。我想將ID更新爲ID = 2 – Amer 2014-09-19 01:00:24

+0

有沒有辦法提供更新的ID?正如你所提到的那樣使用它要快得多。提前致謝 ! – Amer 2014-09-19 01:04:55

+0

對不起,你是對的。它將它添加爲一個新的列。謝謝。 – Amer 2014-09-19 01:10:48

0

你可以使用拆分申請-結合起來,建立一個新的數據幀,每個想要的ID,然後使用rbind將它們組合起來:

ids <- c(1, 2) 
do.call(rbind, lapply(ids, function(id) { 
    new.dat <- dat 
    new.dat$ID <- id 
    return(new.dat) 
})) 
# ID TIME AMT A1 A2 DV 
# 1 1 0 100 100 0 NA 
# 2 1 1 0 NA NA NA 
# 3 1 2 0 NA NA NA 
# 4 1 3 0 NA NA NA 
# 5 1 4 100 NA NA NA 
# 6 1 5 0 NA NA NA 
# 7 1 6 0 NA NA NA 
# 8 1 6 0 NA NA NA 
# 9 1 7 0 NA NA NA 
# 10 2 0 100 100 0 NA 
# 11 2 1 0 NA NA NA 
# 12 2 2 0 NA NA NA 
# 13 2 3 0 NA NA NA 
# 14 2 4 100 NA NA NA 
# 15 2 5 0 NA NA NA 
# 16 2 6 0 NA NA NA 
# 17 2 6 0 NA NA NA 
# 18 2 7 0 NA NA NA 
0

嘗試:

dfout = ddf 
for(i in 2:5) {ddf[,1]=i; dfout = rbind(dfout, ddf)} 
dfout 
    ID TIME AMT A1 A2 DV 
1 1 0 100 100 0 NA 
2 1 1 0 NA NA NA 
3 1 2 0 NA NA NA 
4 1 3 0 NA NA NA 
5 1 4 100 NA NA NA 
6 1 5 0 NA NA NA 
7 1 6 0 NA NA NA 
8 1 6 0 NA NA NA 
9 1 7 0 NA NA NA 
10 2 0 100 100 0 NA 
11 2 1 0 NA NA NA 
12 2 2 0 NA NA NA 
13 2 3 0 NA NA NA 
14 2 4 100 NA NA NA 
15 2 5 0 NA NA NA 
16 2 6 0 NA NA NA 
17 2 6 0 NA NA NA 
18 2 7 0 NA NA NA 
19 3 0 100 100 0 NA 
20 3 1 0 NA NA NA 
21 3 2 0 NA NA NA 
22 3 3 0 NA NA NA 
23 3 4 100 NA NA NA 
24 3 5 0 NA NA NA 
25 3 6 0 NA NA NA 
26 3 6 0 NA NA NA 
27 3 7 0 NA NA NA 
28 4 0 100 100 0 NA 
29 4 1 0 NA NA NA 
30 4 2 0 NA NA NA 
31 4 3 0 NA NA NA 
32 4 4 100 NA NA NA 
33 4 5 0 NA NA NA 
34 4 6 0 NA NA NA 
35 4 6 0 NA NA NA 
36 4 7 0 NA NA NA 
37 5 0 100 100 0 NA 
38 5 1 0 NA NA NA 
39 5 2 0 NA NA NA 
40 5 3 0 NA NA NA 
41 5 4 100 NA NA NA 
42 5 5 0 NA NA NA 
43 5 6 0 NA NA NA 
44 5 6 0 NA NA NA 
45 5 7 0 NA NA NA