首页 > 解决方案 > 当我从列表中获取列名时,dplyr summarise 不起作用?

问题描述

我正在创建一个闪亮的应用程序并使用用户输入来创建图表。当我专门命名管道中的列时,管道和图形工作,如:

f <- fb_ad %>%
  filter(geo == d_choices[2]) %>% 
  group_by(ad_name) %>% 
  summarise(n = sum(clicks))

但是当我使用包含列名/用户输入的列表然后通过管道访问列表的元素时它不起作用,如下所示:

ycol <- c("impressions","reach", "clicks",
             "age", "gender")

f <- fb_ad %>%
   filter(geo == d_choices[2]) %>% 
   group_by(ad_name) %>% 
   summarise(n = sum(ycol[3]))

我得到错误:

Error in summarise_impl(.data, dots) : 
   Evaluation error: invalid 'type' (character) of argument.

为什么这不起作用,我该如何解决这个问题?谢谢!

标签: rshinydplyr

解决方案


如果你有最新版本的 dplyr,以及安装的 rlang 包,你可以使用:

f <- fb_ad %>%
filter(geo == d_choices[2]) %>% 
group_by(ad_name) %>% 
summarise(n = sum(!!rlang::sym(ycol[3])))

该原则的一个小型工作示例(对于没有您的数据的其他人)将是:

library(tidyverse)
ddf <- 
  data.frame(X = rnorm(5), Y = rnorm(5), A = c("A", "A", "B", "B", "B")) %>% 
  tbl_df() %>% mutate(A = as.character(A))

Ch <- c("X", "Y")

ddf %>% group_by(A) %>% 
summarise(N := sum(!!rlang::sym(Ch[2])))

推荐阅读