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

时间:2017-03-15 09:55:37

标签: r dataframe dplyr row magrittr

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

符合以下条件:

  • 对于vars()调用中具有可用索引的列,添加了"A"字符串
  • 对于其余列,提供了NA

方法

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

当然,这会导致错误消息:

  

错误:不支持的索引类型:NULL

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

旁注

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

  1. %>% - 接收对象
  2. 在第一行添加内容到x:y %>%
  3. 在第一行添加内容到m:n %>%
  4. 其他操纵

1 个答案:

答案 0 :(得分:2)

添加行然后更新:

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"添加到具有NAs的任何行。