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

使用For循环在数据帧中的列之间添加多列,r,dataframe,for-loop,match,R,Dataframe,For Loop,Match,输出数据(df) 我试图使用“任务”列的位置而不是名称,在“任务”列之后添加53列。然后,我希望列名称从1开始,以数字53结尾,行中有0。本例中的行转到第3行,但可能会有所不同,因此是否可以使用nrow函数指定行数,而不是硬编码 输出数据-期望结果 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

输出数据(df)

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

输出数据-期望结果

    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执行此操作不需要循环:

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
  • matrix
    将创建一个包含53列和3行的矩阵,其中包含
    0

  • cbind
    将此矩阵添加到数据末尾

  • as.data.frame
    将其转换为数据帧

  • 更新

        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
    
    要按位置插入这些零列,您可以将
    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
    
    添加列

    或者,您可以使用
    tibble
    软件包中的
    add_column
    功能,就像您在文章中一样,使用
    。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)
    

    df这如何处理3行以上的数据?行数每次都可以更改…通常从1400行开始。行数更改的方式是否可以使用nrow函数而不是指定行数?最有可能的是,您的帖子中没有提供行数如何/何时更改的信息。您可以通过指定
    nrow=nrow(df)
    使其更通用。抱歉,我已经编辑了原始帖子