使用 For 循环在数据框中的列之间添加多列

Adding multiple columns in between columns in a data frame using a For Loop

输出数据 (df)

Store.No  Task 
    1      70
    2      50
    3      20

我试图在 'Task' 列之后添加 53 列,方法是使用它的位置而不是名称。然后我希望列名从 1 开始到数字 53 结束,行中有 0。此示例中的行转到第 3 行,但它可能会有所不同,因此是否可以使用 nrow 函数指定行数而不是硬编码

outputdata- 期望的结果

    Store.No  Task  1  2  3  4  5  6  7  8  9  10 ...53
       1      70    0  0  0  0  0  0  0  0  0  0
       2      50    0  0  0  0  0  0  0  0  0  0
       3      20    0  0  0  0  0  0  0  0  0  0

使用代码

x <- 1
y <- 0

for (i in 1:53){

 outputdata <- add_column(outputdata, x = 0, .after = Fo+y)
 y <- y + 1
 x <- x + 1

}

我得到的错误是列被称为 x、x.1、x.2、x.3、x.4...x.53。而不是 1,2,3,4...53...不太清楚为什么会这样

我对 R 还是很陌生,所以有一种更有效的方法,请告诉我

非常感谢

您不需要循环执行此操作:

as.data.frame(cbind(df, matrix(0, nrow = nrow(df), ncol = 53)))

 Store.No Task Third Fourth 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
1        1   70     4      7 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
2        2   50     5      8 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
3        3   20     6      9 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
  26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
2  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
3  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
  1. matrix 将创建一个包含 53 列和 3 行的矩阵,其中填充了 0

  2. cbind 会将此矩阵添加到数据的末尾

  3. as.data.frame 将其转换为数据框

更新

要按位置插入这些零列,您可以将 df 分为两部分:df[, 1:2] 是第一列和第二列,而 df[,3:ncol(df)] 是第三列到数据框的末尾.

as.data.frame(cbind(df[,1:2], matrix(0, nrow = nrow(df), ncol = 53), df[,3:ncol(df)))

Store.No Task 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
1        1   70 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
2        2   50 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
3        3   20 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
  30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 Third Fourth
1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0     4      7
2  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0     5      8
3  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0     6      9

add_column

或者,您可以使用 tibble 包中的 add_column 函数,就像在 post 中一样,使用 .after 参数在第二列之后插入:

library(tibble)

tibble::add_column(df, as.data.frame(matrix(0, nrow = nrow(df), ncol = 53)), .after = 2)

注意:此函数将固定列名,在任何以数字开头的列名前添加一个“V”。所以 1 会变成 V1.


数据

df <- data.frame(Store.No = 1:3,
                 Task = c(70, 50, 20),
                 Third = 4:6,
                 Fourth = 7:9)