在选定数量的列中添加 dplyr 中的行

Adding row in dplyr across a selected number of columns

dplyr 工作流程中,我想在选定数量的列中附加一行。

想要的结果

mtcars 数据开始并应用函数,目的是将字符串 "A" 添加到列 2:5 应该得到如下结果:

                    mpg  cyl disp  hp  drat wt    qsec   vs am   gear carb
                    NA     A A     A   A    NA    NA     NA NA   NA   NA
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2

满足以下条件:

方法

require(dplyr)
mtcars %>%
  mutate_at(.cols = vars(2:5),
            .funs = add_row(. = "A", .before = 1))

自然地,这会导致错误消息:

Error: Unsupported index type: NULL

因此我的问题是:我如何利用 add_row 或类似的方法强制值跨越最初通过 vars() 传递的一组列?


旁注

我不介意通过 rbind 执行此操作,但我想保留我的 %>% 工作流程:

  1. %>% - 接收对象
  2. 将第一行的内容添加到列 x:y %>%
  3. 在第一行和列之间添加内容 m:n %>%
  4. 其他操作

添加行然后更新:

mtcars %>% 
  head %>%
  add_row(.before = 1) %>% 
  mutate_at(.cols = vars(2:5),
            funs(ifelse(is.na(.), "A", .)))

#    mpg cyl disp  hp drat    wt  qsec vs am gear carb
# 1   NA   A    A   A    A    NA    NA NA NA   NA   NA
# 2 21.0   6  160 110  3.9 2.620 16.46  0  1    4    4
# 3 21.0   6  160 110  3.9 2.875 17.02  0  1    4    4
# 4 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
# 5 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
# 6 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
# 7 18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

注意: 这会将 "A" 添加到具有 NA 的任何行。