如何在dplyr summary()中使用循环

如何在dplyr summary()中使用循环,r,loops,dplyr,variable-assignment,R,Loops,Dplyr,Variable Assignment,分组后,我需要对一组变量进行总结。有两个变量需要应用不同的函数,大约有25个变量需要应用相同的函数。在我看来,它应该以某种方式进行优化,这样我就不需要手动编写25倍于新变量名称的代码,也不需要为了获得它而执行的操作 我通过dplyr软件包尝试了两种选择,但都没有成功。下面将进一步介绍我对玩具示例的尝试: library('dplyr') df <- data.frame(letter = c('A', 'A', 'B', 'C', 'A', 'B'),

分组后,我需要对一组变量进行总结。有两个变量需要应用不同的函数,大约有25个变量需要应用相同的函数。在我看来,它应该以某种方式进行优化,这样我就不需要手动编写25倍于新变量名称的代码,也不需要为了获得它而执行的操作

我通过dplyr软件包尝试了两种选择,但都没有成功。下面将进一步介绍我对玩具示例的尝试:

library('dplyr')
df <- data.frame(letter = c('A', 'A', 'B', 'C', 'A', 'B'), 
                 group = c('group1', 'group1', 'group2', 'group3', 'group1', 'group2'),
                 var1= c(1,2,3,4,5,6), 
                 var2=c(6,6,6,6,6,6),
                 var3=c(2,2,2,2,2,2), 
                 var4=c(5,5,5,5,5,5))
var_names <-c('var2', 'var3', 'var4')
groupped <-df%>%
      group_by(letter, group)%>%
      summarise(var1_mean = mean(var1), 
                freq = n(),
                for (varp in var_names) {
                  nam <- paste(varp, "_sum", sep = "")
                  assign(nam, eval(parse(text=paste0("sum(", varp,")"))))
                }
                )

我知道如何通过循环中的
arrange()
将列通过
cbind()
绑定到df来完成此任务,但这太低效了,因此,只需手动创建25个变量似乎更有效:)有什么想法可以使这个过程自动化吗?

为此,您可以使用
summary_at

df %>% summarise_at(vars(var_names), list(mean = mean, sum = sum))
如果还有一些函数不想应用于所有列,则需要单独执行,然后
left\u join
结果:

df %>% 
 group_by(letter, group) %>%
 summarise(freq = n()) %>%
 left_join(df %>% 
             group_by(letter, group)%>%
             summarise_at(vars(var_names), list(mean = mean, sum = sum)),
           by = c("letter", "group")
           )

new\u col\u name
nam
中,您的预期输出是什么?这并不重要。但我已经编辑了它,为了保持名称的一致性,我的问题是,您的预期输出是什么?独立于名称。谢谢!第二个解决方案正是我想要的。
df %>% 
 group_by(letter, group) %>%
 summarise(freq = n()) %>%
 left_join(df %>% 
             group_by(letter, group)%>%
             summarise_at(vars(var_names), list(mean = mean, sum = sum)),
           by = c("letter", "group")
           )