当不需要特定订单时,可以使用rep
和c
.
with(data, data.frame(year, type = rep(0:1, each=length(year)),
n = c(n1, n2), r = c(r1, r2)))
# year type n r
#1 1990 0 30 0
#2 1990 0 70 9
#3 1994 0 20 3
#4 2000 0 31 4
#5 2012 0 10 4
#6 1990 1 40 3
#7 1990 1 60 9
#8 1994 1 20 1
#9 2000 1 21 2
#10 2012 1 8 0
或者维持秩序:
with(data, data.frame(year, type = rep(0:1, each=length(year)),
n = c(n1, n2), r = c(r1, r2))[
c(matrix(seq(1:(2*length(year))), 2, byrow=TRUE)),])
# year type n r
#1 1990 0 30 0
#6 1990 1 40 3
#2 1990 0 70 9
#7 1990 1 60 9
#3 1994 0 20 3
#8 1994 1 20 1
#4 2000 0 31 4
#9 2000 1 21 2
#5 2012 0 10 4
#10 2012 1 8 0
或者另一种变体重复原始数据集并更新内容.
. <- data[rep(seq_len(nrow(data)), each=2),]
.$n1[c(FALSE, TRUE)] <- .$n2[c(TRUE, FALSE)]
.$r1[c(FALSE, TRUE)] <- .$r2[c(TRUE, FALSE)]
with(., data.frame(year, type = 0:1, n=n1, r=r1))
# year type n r
#1 1990 0 30 0
#2 1990 1 40 3
#3 1990 0 70 9
#4 1990 1 60 9
#5 1994 0 20 3
#6 1994 1 20 1
#7 2000 0 31 4
#8 2000 1 21 2
#9 2012 0 10 4
#10 2012 1 8 0