mutate_at有两组变量

时间:2019-07-18 17:45:36

标签: r dplyr

我刚刚问过a question about generating multiple columns at once with dplyr,但我是一个笨蛋,过分简化了问题,并提出了另一个问题。我想找到一种dplyr方法,用于根据其他列动态生成列。

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

在该问题的第一次迭代中,我仅包含一组先前定义的列,因此可以使用以下内容:

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

但是,正如前几行代码所建议的那样,我想将两个现有的列相乘在一起,并且无法弄清楚该如何做。我尝试过:

df %>%
  mutate_at(c(vars(foo), vars(bar)), 
            function(x,y) {x * y})

返回错误:

Error in (function (x, y)  : argument "y" is missing, with no default

是否可以引用要与mutate_at相互使用的多组列?

1 个答案:

答案 0 :(得分:3)

好吧,您想使用两列,我认为Podocarpaceae Afrocarpus Podocarpaceae Dacrycarpus Podocarpaceae Dacrydium Podocarpaceae Podocarpus 是可以使用的函数:

purrr::map2