首页 > 解决方案 > dplyr 在 mutate() 中使用 select() 助手

问题描述

我要创建一个新变量,它代表许多其他变量的总和(或其他函数),这些变量都以“prefix_”开头。有没有办法使用这些 select() 助手(例如starts_with())巧妙地做到这一点?

我不认为mutate_at() 可以解决这个问题,因为我只是想根据许多现有变量创建一个新变量。

我的尝试:

df %<>%
  mutate(newvar = sum(vars(starts_with("prefix_"))))

这当然行不通。非常感谢!

一个可重现的例子:

mtcars %<>% 
  rename("prefix_mpg" = mpg) %>% 
  rename("prefix_cyl" = cyl) %>% 
  mutate(newvar = sum(var(starts_with("prefix_"))))

预期输出是 mtcars$newvar,它是 prefix_mpg 和 prefix_cyl 的总和。当然,我可以明确地命名 mpg 和 cyl,但在我的实际情况下,它是一长串变量,太长而无法方便地命名。

标签: rdplyr

解决方案


我们可以starts_withselect调用一起使用并将它们放入rowSums函数中。.是一种从上一个管道操作的输出中指定对象的方法。

library(dplyr)

mtcars %>% 
  rename(prefix_mpg = mpg, prefix_cyl = cyl) %>% 
  mutate(newvar = rowSums(select(., starts_with("prefix_"))))

推荐阅读