r - 当我从列表中获取列名时,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.
为什么这不起作用,我该如何解决这个问题?谢谢!
解决方案
如果你有最新版本的 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])))
推荐阅读
- php - 将表单上的当前记录导出到 Laravel 上的 Excel
- css - 无法将样式表添加到 wicked_pdf
- mysql - 在 sql 查询中获取每个子类型的最大值
- javascript - 这种检查对象是否为空的方法有什么问题?
- javascript - sequlize 数组不在前端发送数据
- java - Cassandra java.lang.OutOfMemoryError:CentOS 7 上的 Java 堆空间
- javascript - 节点 | 承诺没有完成
- android - 改造2如何处理有时无效有时非无效的服务器响应
- python - 二维直方图的样条插值 - Python
- javascript - 使用 p5.js 在 Javascript 中的 2 个角度之间旋转图像