我有以下数据框:
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中是否有办法可以复制它,但将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
提前谢谢!
答案 0 :(得分: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)
即使数据非常小,它的速度也要快得多。
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
答案 1 :(得分:0)
您可以使用split-apply-combine构建包含每个所需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
答案 2 :(得分: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