Dplyr select 和 group_by 之间关于引用变量的区别?

2024-03-12

在当前版本的 dplyr 中,select参数可以按值传递:

variable <- "Species"
iris %>% 
    select(variable)

#       Species
#1       setosa
#2       setosa
#3       setosa
#4       setosa
#5       setosa
#6       setosa
#...

But group_by参数不能按值传递:

iris %>% 
    group_by(variable) %>% 
    summarise(Petal.Length = mean(Petal.Length))

# Error in grouped_df_impl(data, unname(vars), drop) : 
# Column `variable` is unknown

The 记录 dplyr::select 行为 https://www.rdocumentation.org/packages/dplyr/versions/0.7.2/topics/select is

iris %>% select(Species)

并且有记录的记录 dplyr::group_by 行为 https://www.rdocumentation.org/packages/dplyr/versions/0.7.2/topics/group_by is

iris %>% 
    group_by(Species) %>% 
    summarise(Petal.Length = mean(Petal.Length))
  • Why are select and group_by与按值传递参数不同?
  • 为什么是第一个select调用工作并且它将来会继续工作吗?
  • 为什么是第一个group_by打电话不通?我想弄清楚什么组合quo(), enquo() and !!我应该用它来让它发挥作用。

我需要这个,因为我想创建一个将分组变量作为输入参数的函数,如果可能的话,分组变量应该以字符串形式给出,因为另外两个函数参数已经以字符串形式给出。


要将字符串作为符号或未计算的代码传递,您必须首先将其解析为符号或quosure。您可以使用sym or parse_expr from rlang解析并稍后使用!!取消引用:

library(dplyr)

variable <- rlang::sym("Species")
# variable <- rlang::parse_expr("Species")

iris %>% 
  group_by(!! variable) %>% 
  summarise(Petal.Length = mean(Petal.Length))

!!是一个快捷方式UQ(),取消引用表达式或符号。这允许variable仅在调用范围内进行评估,即group_by.

之间的区别sym and parse_expr以及何时使用哪一个?

简短的回答:在这种情况下并不重要。

长答案:

符号是引用 R 对象的一种方式,基本上是对象的“名称”。所以sym类似于as.name在基础 R 中。parse_expr另一方面将一些文本转换为 R 表达式。这类似于parse在基础 R 中。

表达式可以是anyR 代码,不是just引用 R 对象的代码。所以你可以解析code引用 R 对象,但你不能将一些随机代码变成sym如果它引用的对象不存在。

一般来说,您将使用sym当你的字符串引用一个对象时(尽管parse_expr也可以),并使用parse_expr当你试图解析时any其他 R 代码以供进一步评估。

对于这个特定的用例,variable应该引用一个对象,所以把它变成一个sym会工作。另一方面,将其解析为表达式也可以工作,因为这是code将在内部进行评估group_by当被取消引用时!!.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dplyr select 和 group_by 之间关于引用变量的区别? 的相关文章

  • 更改 RMarkdown 中的块背景颜色

    我希望某个代码块以不同的颜色 例如红色 突出显示 以表明这是不好的做法 如果我使用的是 Rnw 我可以添加块选项background red 并得到我想要的 但这似乎不起作用 Rmd 我的猜测是 我需要制作一个自定义 css 样式表 尽管我
  • MICE LoggedEvents 是什么意思?

    我正在尝试使用以下方法运行多重插补miceR 中的函数 来自同名包 我收到一条警告 表明事件已被记录 这是输出mice loggedEvents来自我的 MWE 见下文 it im dep meth out 1 1 X pmm H 我不确定
  • 将outer()应用于两个列表

    我有一个清单 说exm list elm1 c a b elm2 c b c d elm3 c b c d e 我想对以下两个元素的每个组合应用一个函数exm e g length intersect exm elm1 exm elm2 结
  • as.data.frame 将嵌套列表展平为单行,而不是为每个记录创建行[重复]

    这个问题在这里已经有答案了 我有一个嵌套列表 如下所示 mylist lt vector list 2 mylist 1 name lt The Tucson IOT Meetup Group mylist 1 state lt AZ my
  • R 数据框到嵌套列表

    我想将这种格式的数据帧 tbl 转换为以下嵌套列表 tbllst library tidyr tbl lt tribble Col1 Col2 Col3 Var1 Var1 1 Var1 1 1 Var1 Var1 1 Var1 1 2 V
  • R 从 .CSV 创建 NetCDF

    我正在尝试从 csv 文件创建 NetCDF 我在这里和其他地方读过一些教程 但仍然有一些疑问 我有一个这样的表 lat long time rh temp 41 109 6 1 1 40 107 18 2 2 39 105 6 3 3 4
  • 相当于 Rcpp 中的 'which' 函数

    我是 C 和 Rcpp 的新手 假设我有一个向量 t1 lt c 1 2 NA NA 3 4 1 NA 5 我想获得 t1 的元素索引NA 我可以写 NumericVector retIdxNA NumericVector x Step 1
  • 如何绘制两个 ggplot 密度分布之间的差异?

    我想使用 ggplot2 来说明两个相似密度分布之间的差异 这是我拥有的数据类型的玩具示例 library ggplot2 Make toy data n sp lt 100000 n dup lt 50000 D lt data fram
  • 如何在闪亮进度条的详细消息中添加换行符?

    有没有办法在闪亮的进度条消息中添加换行符 n or br 似乎不起作用 我正在尝试将我的一个旧代码转换为一个闪亮的应用程序 该代码基本上是一个接一个地调用许多函数 所有这些函数都需要一些时间来执行 从应用程序中 我想知道哪些功能已经执行以及
  • 使用 Visual Studio 构建 R 包 (C API)

    我正在尝试使用 Visual Studio 构建一个简单的 R 包 这是我的代码 include
  • R+Hadoop:如何从HDFS读取CSV文件并执行mapreduce?

    在以下示例中 small ints to dfs 1 1000 mapreduce input small ints map function k v cbind v v 2 MapReduce函数的数据输入是一个名为small ints的
  • 在开发模式下安装包(R源未编译成Rdb)

    我需要修改R代码在一个R具有 Fortran 绑定的包 当我安装软件包时 我看到存储库目录没有源代码 但是 Rdb而是二进制文件 我看了看devtools包 但我仍然不清楚如何在不编译 R 源部分的情况下安装该包 类似于 python py
  • 自动化 RStudio 处理 RMarkdown?

    我有一个 RMarkdown 文件 用于生成漂亮的 HTML 报告 问题是 我希望能够自动化它 以便它可以在无头服务器上运行 因此 不会有人启动 Rstudio 并按下 knithtml 按钮 而且 Rstudio 似乎正在做很多额外的魔法
  • R 语言 - 等待用户使用 scan 或 readline 输入

    我试图让用户输入一些关键字进行查询 在我的脚本中我使用了 scan 或 readline 我使用 R 嵌入脚本编辑器 Windows 进行了尝试 但是当我执行代码时 它使用我的下一行脚本作为标准输入 这是我的 部分 脚本 keywords
  • 加拿大人口普查地图分区 R

    我对 R 和映射非常陌生 我想创建某些数据的映射 我有一组名为 D Montreal 的数据 显示 2010 年前往蒙特利尔的加拿大人口普查部门游客来自哪个国家 我想使用此数据创建一个地图 以显示有多少人来自不同地区 也许可以通过对根据人数
  • 从 foreach 循环赋值

    我想并行化一个循环 例如 td lt data frame cbind c rep 1 4 2 rep 1 5 rep 1 10 2 names td lt c val id res lt rep NA NROW td for i in l
  • R:如何添加具有从矩阵的每一行中随机选择的值的列?

    我会先说我是一个 R 菜鸟 我认为这可能有一个简单的解决方案 但我正在努力寻找它 我有一个 2 列 1 000 行的矩阵 保持行固定 我想创建一个新变量 从两列中随机选择一个元素 例如制作一个简单的矩阵 matrix c 1 1 4 6 1
  • 更改 ggplot 条形图填充颜色

    有了这个数据 df lt data frame value c 20 50 90 group c 1 2 3 我可以得到一个条形图 df gt ggplot aes x group y value fill value geom col c
  • 更改列的顺序

    我正在处理一个包含 gt 40 列的大型数据框 我希望能够移动列 而不必指定所有列名称 例如 a lt c 1 5 b lt c 4 3 2 1 1 Percent lt c 40 30 20 10 10 Labels lt c Cat D
  • 当按多列分组时,如何命名 dplyr 中的 group_split 列表

    我在 dplyr 中使用 group split 在分割了多个列后 我很难命名列表 当我们按一列分组时 我知道该怎么做here https stackoverflow com questions 57107721 how to name t

随机推荐

  • Angular4 项目上字体很棒的图标未加载

    我正在使用 font awesome 开发 Angular 4 项目 我按照本指南使用 npm 安装库 如何将 font awesome 添加到 Angular 2 CLI 项目 https stackoverflow com questi
  • 根据多个任意模式验证 XML

    考虑一个具有多个模式的 XML 文档 其开头如下所示 这不是 Spring 特定的问题 这只是示例的一个方便的 XML 文档
  • 为什么 GetAttr 不适用于 cloudformation 模板参数?

    拥有父子关系中的 cloudformation 模板集合 并希望将 AWS IAM Role 传递到子堆栈的参数中 并使用 GetAttr 获取 Arn 这会导致验证失败 因为只能对资源调用 GetAttr 而不能对参数调用 有人知道 猜猜
  • 当服务器在Linux中启动时,Spring Boot出现错误

    首先 有两个Linux服务器 我想建立一个冗余的web server在两台服务器上 我在两台服务器上均等地安装了jre1 8 0 并且我在两台服务器上均等地安装了相同的spring boot war文件 顺便一提 服务器1正常启动并正常工作
  • 如何在 ruby​​ on Rails 中调用存储过程?

    我是 ROR 新手 我想在单击 VIEW 中的提交按钮时调用存储过程进行处理 Model class Pro DataImport lt ActiveRecord Base attr accessible file name process
  • NamedPipe 多个服务器

    对于简单的 IPC 我选择了 NamedPipes 在进程 本地 之间进行通信 由于需求的变化 应该有多个服务器实例 这会导致同一管道名上有多个 侦听器 但似乎有一个问题 这些侦听器中只有一个会收到消息 其他所有实例都不会收到消息 有某种
  • Python 从装饰器导入模块

    我正在使用 Python 3 开发一个应用程序 而且我所做的事情是非常规的 cx Oracle 是一个很难设置的模块 对于我的应用程序来说是一个可选的依赖项 我想做的是将模块的导入包装在装饰器中 仅放置在使用它的函数之上 这将避免必须在我的
  • 递增循环的致命错误

    目前 我正在尝试创建一个函数 在 Fighter cpp 文件中的函数 sortFighters 中对充满战斗机的向量进行排序 一切似乎都可以正确编译 但是 当它运行时 我在上述 cpp 文件的某一行中收到致命错误 我确切地知道问题是什么
  • 未添加 NuGet 包的参考

    我有一个自定义 NuGet 包 My Resources 其中包含程序集和对另一个自定义 NuGet 包 My Base 的依赖项 如果我安装该软件包 安装会成功完成 但不会添加程序集引用 这是完整的输出Install Packagecom
  • 矩阵列表乘以标量,Rcpp 中不保留维度属性

    我正在使用 Rcpp 来加速一些 R 代码 实际上这是我 2014 年 待办事项 列表中的项目之一 部分代码包括将矩阵列表乘以标量 我能够得到结果 尽管如此 矩阵不再是矩阵 而是向量 我想要一个矩阵列表作为最终输出 这是我到目前为止的代码
  • htaccess 重定向百分号

    我遇到了 htaccess redirect 问题 在搜索了近一个小时后无法解决 请帮我 RewriteRule yeah http www domain de awesome 123123 NC QSA L R 301 所以我想从doma
  • 从 futures::Stream 转发到 futures::Sink

    我目前正在尝试了解 tokio futures 原语和生态系统 我开始做一些工作tk http websocket 示例 https github com swindon rs tk http blob abfdb50a00ab90b4f0
  • 在 C# 中导入 DLL

    我正在尝试使用 DllImport 将 dll 导入到我的 C 项目 如下所示 DllImport kernel32 private static extern long WritePrivateProfileString string s
  • 使用 HTML / CSS 显示/隐藏带有复选框的特定 Div

    我正在尝试找出一种方法来链接特定的复选框以显示 隐藏specificdiv 元素 我能够找到显示 隐藏 Div 元素的复选框的代码紧接在下面他们 但我想知道是否有一种方法可以将特定的复选框链接到我选择的任何 div 在我的代码中 我基本上想
  • 如何在 R 中获得 ping 响应

    我有一个包含域名列的数据框 我想通过 ping 域名来查看存在哪个域 我可以从以下函数获得单独的 ping 响应 ping lt function x stderr FALSE stdout FALSE pingvec lt system2
  • 应用自动调整大小时旋转期间 iOS8 MKMapView 帧缓冲区错误

    import AppDelegate h import
  • 如何将 gettext 与 python >3.6 f 字符串一起使用

    以前你会使用gettext如下 Hey format username 但是新的 Python 的 f 字符串呢 f Hey username Hey 按原样包含在您的翻译词典中 如果你使用f Hey username 这会创建另一个不会被
  • 如果父对象不是单例,那么子对象也是单例吗?

    我有一个不是单例的 Dao 从他扩展的其他对象 是否是单例 代码示例
  • 按数字顺序对文件进行排序

    我编写了一个程序将文件夹中的所有文件组合在一起 这是我的代码的一部分 File folder new File c some directory File listOfFiles folder listFiles for File file
  • Dplyr select 和 group_by 之间关于引用变量的区别?

    在当前版本的 dplyr 中 select参数可以按值传递 variable lt Species iris gt select variable Species 1 setosa 2 setosa 3 setosa 4 setosa 5