使用添加列重复data.frame N次

mak*_*buk 3 r dataframe

我有以下数据框,我想重复N次

dc <- read.table(text = "from    1    2    3    4    5
    1 0.01 0.02 0.03 0.04 0.05
    2 0.06 0.07 0.08 0.09 0.10
    3 0.11 0.12 0.13 0.14 0.15
    4 0.16 0.17 0.18 0.19 0.20
    5 0.21 0.22 0.23 0.24 0.25", header = TRUE)

n<-20    
ddr <- NA

for(i in 1:n) {
  ddr <- rbind(ddr, cbind(dc,i))
}
Run Code Online (Sandbox Code Playgroud)

结果,我想收到:

from   X1   X2   X3   X4   X5  i
1 0.01 0.02 0.03 0.04 0.05  1
2 0.06 0.07 0.08 0.09 0.10  1
3 0.11 0.12 0.13 0.14 0.15  1
4 0.16 0.17 0.18 0.19 0.20  1
5 0.21 0.22 0.23 0.24 0.25  1
1 0.01 0.02 0.03 0.04 0.05  2
2 0.06 0.07 0.08 0.09 0.10  2
3 0.11 0.12 0.13 0.14 0.15  2
4 0.16 0.17 0.18 0.19 0.20  2
5 0.21 0.22 0.23 0.24 0.25  2
.............................
1 0.01 0.02 0.03 0.04 0.05 20
2 0.06 0.07 0.08 0.09 0.10 20
3 0.11 0.12 0.13 0.14 0.15 20
4 0.16 0.17 0.18 0.19 0.20 20
5 0.21 0.22 0.23 0.24 0.25 20
Run Code Online (Sandbox Code Playgroud)

矩阵必须重复N次,并添加重复次数.

这个问题是否有正确的解决方案(在R中执行此操作的简单功能)?在我的情况下,如果未声明ddr(ddr <-NA),则脚本不起作用.谢谢!

Ric*_*ven 6

您可以使用rep()复制行索引,也可以创建重复编号列.

cbind(dc[rep(1:nrow(dc), n), ], i = rep(1:n, each = nrow(dc)))
Run Code Online (Sandbox Code Playgroud)

让我们分解一下:

  • dc[rep(1:nrow(dc), n), ]在数据帧i的行索引值中使用复制的行索引[
  • rep(1:n, each = nrow(dc))复制一个序列,每个n值的长度nrow(dc)乘以
  • cbind(...) 将两者组合成一个数据帧

正如@HubertL在评论中指出的那样,这可以进一步简化为

cbind(dc, i = rep(1:n, each = nrow(dc)))
Run Code Online (Sandbox Code Playgroud)

感谢回收的魔力.请给他投票.

  • 或者只是`cbind(dc,i = rep(1:n,each = nrow(dc)))` (4认同)