使用dplyr一次生成多个列

时间:2019-07-18 15:48:17

标签: r dplyr

我经常不得不根据现有列中的值动态生成多个列。是否有与以下内容等效的dplyr?:

cols <- c("x", "y")
foo <- c("a", "b")
df <- data.frame(a = 1, b = 2)
df[cols] <- df[foo] * 5

> df
  a b x  y
1 1 2 5 10

1 个答案:

答案 0 :(得分:3)

不是最优雅的:

library(tidyverse)
df %>% 
  mutate_at(vars(foo),function(x) x*5) %>% 
   set_names(.,nm=cols) %>% 
   cbind(df,.)
  a b x  y
1 1 2 5 10

如@akrun所建议的那样,可以使其更加优雅:

df %>%
 mutate_at(vars(foo), list(new = ~ . * 5)) %>% 
 rename_at(vars(matches('new')), ~ c('x', 'y'))