`dplyr::_join` 函数的命名向量“by”参数[重复]

2024-05-19

我正在写一个函数dplyr::_join两个数据框by不同的列,第一个数据帧的列名称动态指定为函数参数。我相信我需要使用rlang准引用/元编程,但未能找到可行的解决方案。我很感激任何建议!

library(dplyr)
library(rlang)
library(palmerpenguins)

# Create a smaller dataset
penguins <-
  penguins %>% 
  group_by(species) %>% 
  slice_head(n = 4) %>% 
  ungroup()

# Create a colors dataset
penguin_colors <-
  tibble(
    type = c("Adelie", "Chinstrap", "Gentoo"),
    color = c("orange", "purple", "green")
  )


# Without function --------------------------------------------------------

# Join works with character vectors
left_join(
  penguins, penguin_colors, by = c("species" = "type")
)
#> # A tibble: 12 x 9
#>    species island bill_length_mm bill_depth_mm flipper_length_… body_mass_g
#>    <chr>   <fct>           <dbl>         <dbl>            <int>       <int>
#>  1 Adelie  Torge…           39.1          18.7              181        3750
#>  2 Adelie  Torge…           39.5          17.4              186        3800
#>  3 Adelie  Torge…           40.3          18                195        3250
#>  4 Adelie  Torge…           NA            NA                 NA          NA
#>  5 Chinst… Dream            46.5          17.9              192        3500
#>  6 Chinst… Dream            50            19.5              196        3900
#>  7 Chinst… Dream            51.3          19.2              193        3650
#>  8 Chinst… Dream            45.4          18.7              188        3525
#>  9 Gentoo  Biscoe           46.1          13.2              211        4500
#> 10 Gentoo  Biscoe           50            16.3              230        5700
#> 11 Gentoo  Biscoe           48.7          14.1              210        4450
#> 12 Gentoo  Biscoe           50            15.2              218        5700
#> # … with 3 more variables: sex <fct>, year <int>, color <chr>

# Join works with data-variable and character vector
left_join(
  penguins, penguin_colors, by = c(species = "type")
)
#> # A tibble: 12 x 9
#>    species island bill_length_mm bill_depth_mm flipper_length_… body_mass_g
#>    <chr>   <fct>           <dbl>         <dbl>            <int>       <int>
#>  1 Adelie  Torge…           39.1          18.7              181        3750
#>  2 Adelie  Torge…           39.5          17.4              186        3800
#>  3 Adelie  Torge…           40.3          18                195        3250
#>  4 Adelie  Torge…           NA            NA                 NA          NA
#>  5 Chinst… Dream            46.5          17.9              192        3500
#>  6 Chinst… Dream            50            19.5              196        3900
#>  7 Chinst… Dream            51.3          19.2              193        3650
#>  8 Chinst… Dream            45.4          18.7              188        3525
#>  9 Gentoo  Biscoe           46.1          13.2              211        4500
#> 10 Gentoo  Biscoe           50            16.3              230        5700
#> 11 Gentoo  Biscoe           48.7          14.1              210        4450
#> 12 Gentoo  Biscoe           50            15.2              218        5700
#> # … with 3 more variables: sex <fct>, year <int>, color <chr>

# Join does NOT work with character vector and data-variable
left_join(
  penguins, penguin_colors, by = c(species = type)
)
#> Error in standardise_join_by(by, x_names = x_names, y_names = y_names): object 'type' not found



# With function -----------------------------------------------------------

# Version 1: Without tunneling
add_colors <- function(data, var) {
  left_join(
    data, penguin_colors, by = c(var = "type")
  )
}

add_colors(penguins, species)
#> Error: Join columns must be present in data.
#> x Problem with `var`.
add_colors(penguins, "species")
#> Error: Join columns must be present in data.
#> x Problem with `var`.

# Version 2: With tunneling
add_colors <- function(data, var) {
  left_join(
    data, penguin_colors, by = c("{{var}}" = "type")
  )
}

add_colors(penguins, species)
#> Error: Join columns must be present in data.
#> x Problem with `{{var}}`.
add_colors(penguins, "species")
#> Error: Join columns must be present in data.
#> x Problem with `{{var}}`.

# Version 2: With tunneling and glue syntax
add_colors <- function(data, var) {
  left_join(
    data, penguin_colors, by = c("{{var}}" := "type")
  )
}

add_colors(penguins, species)
#> Error: `:=` can only be used within a quasiquoted argument
add_colors(penguins, "species")
#> Error: `:=` can only be used within a quasiquoted argument

Created on 2020-10-05 by the reprex package https://reprex.tidyverse.org (v0.3.0)

以下是我查阅的相关资源:

  • 将“rlang”准引用与“dplyr::_join”函数一起使用 https://stackoverflow.com/questions/58846126/using-rlang-quasiquotation-with-dplyr-join-functions
  • https://dplyr.tidyverse.org/reference/join.html https://dplyr.tidyverse.org/reference/join.html
  • https://speakerdeck.com/lionelhenry/interactivity-and-programming-in-the-tidyverse https://speakerdeck.com/lionelhenry/interactivity-and-programming-in-the-tidyverse
  • https://dplyr.tidyverse.org/articles/programming.html https://dplyr.tidyverse.org/articles/programming.html

感谢您的建议。


library(dplyr)
left_join(
  penguins, penguin_colors, by = c(species = "type")
)

上述工作的原因是因为by我们正在创建一个像这样的命名向量:

c(species = "type")
#species 
# "type"

您也可以通过以下方式做到这一点setNames :

setNames('type', 'species')

但请注意经过species没有引号失败。

setNames('type', species)

setNames(“type”,species)中的错误:未找到对象“species”

因此创建一个命名向量setNames并在函数中传递字符值。

add_colors <- function(data, var) {
  left_join(
    data, penguin_colors, by = setNames('type', var)
  )
}

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

`dplyr::_join` 函数的命名向量“by”参数[重复] 的相关文章

  • 如何将闪亮 UI 输入框中的值传递回 R 脚本中的变量并运行它?

    我有以下代码source R我正打算逃离闪亮的 目前脚本中有硬编码值 例如 10000 55 15 200 等 以及这些值下面的一些矩阵相关元素 rnorm2 lt function n mean sd mean sd scale rnor
  • 通过 knit 和 igraph 在乳胶中绘制 tkplot

    这可能是一个疯狂的奇怪的梦 我梦想着我可以放一个tkplot from igraph在乳胶文档中通过knitr 我知道一辉对动画很了解 所以我想也许这是可能的 谷歌搜索没有显示我想要什么 所以这是一个无效的尝试 documentclass
  • 无法使用 RODBC 附加到具有自动编号列的表

    我正在尝试使用 RODBC 将新行插入到 Microsoft Access 数据库中的表中 问题是主键列是一个自动编号 它似乎不允许我省略此列 我正在使用带有append TRUE 的sqlSave 函数和带有单行的数据框 我已经尝试过以下
  • 输出到文件时光栅图的分辨率较差

    我有一个相当高清晰度的全球地图栅格 想要绘制到文件 但似乎无法保持分辨率 绘制受限区域效果很好 但无论我使用什么方法 整个世界总是以降低的分辨率告终 我在这里错过了什么吗 我以前经常输出高分辨率栅格而没有出现此问题 但在这种情况下我无法确定
  • 如何绘制沿染色体图形的位置

    我想生成一个图 描绘我所研究的生物体的 14 条线性染色体 按比例绘制 并在每条染色体的指定位置上用彩色条表示 理想情况下 我想使用 R 因为这是我有经验的唯一编程语言 我探索了多种方法来做到这一点 例如使用 GenomeGraphs 但我
  • 如何替换异常值?

    我有以下数据框 d lt data frame Open rnorm 10 5 1 如果我插入异常值 d Open 4 100 d Open 5 100 现在我想用正常值替换这些异常值 我尝试用以前的值替换它 但如果逐个出现异常值 则它不起
  • 将数据框中的字符向量与另一个字符向量进行匹配并修剪字符

    这是一个数据框和一个向量 df1 lt tibble var1 c abcd efgh ijkl qrst vec lt c abcd mnop ijkl 现在 对于 var1 中与 vec 中的值匹配的所有值 仅保留 var1 中的前 3
  • LaTex 中与 knit 和 xtable 交叉引用的问题

    我目前正在与 R Studio 合作 使用 LaTex 中的 R knitr 生成 PDF 文档 在这些文档中 我想在文本中引用的表格中展示我的部分结果 我使用 R 中的 xtable 包生成这些表 它运行良好并为我提供了正确的表 到目前为
  • 替换列表列表中的元素

    The applyR 中的函数是简化 for 循环以获得输出的好方法 是否有一个等效的函数可以帮助人们在替换向量的值时避免 for 循环 通过示例可以更好地理解这一点 Take this list for example x list li
  • 如何在R中计算文本中的句子数?

    我使用 R 将文本读入readChar 功能 我的目的是测试文本句子中字母 a 出现次数与字母 b 出现次数一样多的假设 我最近发现了 stringr 包 它帮助我对文本做很多有用的事情 例如计算字符数以及整个文本中每个字母出现的总数 现在
  • .wav 文件长度/持续时间,无需读入文件

    有没有办法提取有关 wav 文件长度 持续时间的信息 而无需在 R 中读取文件 我有数千个这样的文件 如果我必须阅读每个文件才能找到其持续时间 那将需要很长时间 Windows 文件资源管理器为您提供了打开 长度 字段的选项 并且您可以查看
  • 计算例如具有多列 data.frames 的列表中的平均值

    我有几个 data frames 的列表 每个 data frame 有几列 通过使用mean mylist first dataframe a我可以得到这个 data frame 中 a 的平均值 但是我不知道如何计算列表中存储的所有 d
  • 是否可以通过扫描从控制台读取而不回显字符?

    这是一个示例函数 passwordEntry lt function cat Enter your password pwd lt scan n 1 what character quiet TRUE invisible pwd 并测试该功
  • 如何从 R 运行带有特定模块的 perl 脚本?

    我可以从终端运行 perl 脚本 myperlscript pl 没有任何问题 但是 如果我尝试从 RStudio 中运行相同的 perl 脚本 则会出现以下错误 command lt myperlscript pl outputfile
  • 计算每个唯一值出现的次数

    假设我有 v rep c 1 2 2 2 25 现在 我想计算每个唯一值出现的次数 unique v 返回唯一值是什么 但不返回它们的数量 gt unique v 1 1 2 我想要一些能给我的东西 length v v 1 1 25 le
  • 如何从 Fortran 调用 R 函数?

    根据http gallery rcpp org articles r function from c http gallery rcpp org articles r function from c Rcpp 允许用户从 C 调用 R 函数
  • 正则表达式字符串中第一个和最后一个非点的位置

    我希望找到字符串的第一个和最后一个非点元素的位置 理想情况下我想这样做regex在基地R 我已经写过R解决问题的代码 不过 我对一个感兴趣regex解决方案 感谢您的任何建议 这是一个示例数据集和R代码以获得所需的结果 此代码拆分字符串并使
  • R - Plm 和 lm - 固定效应

    我有一个平衡面板数据集 df 本质上由三个变量组成 A B and Y 对于一堆独特识别的区域来说 它会随着时间的推移而变化 我想运行一个回归 其中包括区域 下面等式中的区域 和时间 年份 固定效应 如果我没记错的话 我可以通过不同的方式来
  • 使用 pracma::findpeaks 识别持续峰值

    我的语法有问题peakpat内的选项findpeaks内的函数pramcaR 包 v 2 1 1 我使用的是 R 3 4 3 x64 Windows 我希望该函数能够识别可能有两个重复值的峰值 并且我相信该选项peakpat这就是我能做到的
  • 时间戳半小时窗口内字段的平均值

    我的数据框有列名Timestamp es看起来像 Timestamp es 2015 04 01 09 07 42 31 2015 04 01 09 08 01 29 5 2015 04 01 09 15 03 18 5 2015 04 0

随机推荐

  • Angular 提供的服务在 VS forRoot 中

    我想知道这两个代码块是否等效 我可以用吗providedIn与以下结果相同forRoot Injectable providedIn root export class MyService constructor vs Injectable
  • 单个成员结构的对齐和大小保证

    给定一个 可能非 POD struct具有单个成员 没有继承 也没有虚方法 struct Foo Bar value Foo do something C 是否保证Foo将具有相同的对齐方式并且sizeof as Bar 如果不能 那么可以
  • int (*) (int *) = 5(或任何整数值)的含义

    我无法弄清楚这一点 int main int int 5 return 0 上述作业使用 g c 11 进行编译 我知道int int 是一个指向接受一个函数的指针 int 作为参数并返回一个 int 但我不明白你如何将它等同于 5 起初我
  • 如何反序列化键名.Net中包含点(.)的Json字符串[重复]

    这个问题在这里已经有答案了 odata metadata sometext odata nextLink sometext value odata type SP Data RegionsListItem odata id 07404daa
  • 如何在 CakePHP 中“验证”人名?

    我有一个 PHP 脚本 应该检查 有效 的人名 但最近破解了带有空格的名称 因此我们向验证器添加了空格 除了这样做之外 有没有办法向 CakePHP 的验证器添加黑名单以阻止所有 无效 字符 而不是允许 有效 字符 注意 我 通常 知道如何
  • Firebase 数据库数据读取时返回 Null

    我不知道为什么 我已经探索过 setValue and updateChildren 方法 但无论出于何种原因 当我从 firebase 读取数据时 它返回 null 以下是我向 Firebase 写入的方式 模型投票类别 IgnoreEx
  • 照片马赛克算法。如何在给定基本图像和瓷砖列表的情况下创建马赛克照片?

    Hy 我要做的是创建一个程序 使用 C 或 C 它将 24 位 像素位图和图像集合作为输入 我必须创建一个马赛克图像 类似于使用库的输入图像给定的图像 创建与输入类似的马赛克照片 到目前为止 我可以访问输入的图像像素及其颜色 但我有点卡住了
  • SQLiteException - 仅发生在某些设备上

    我最近向市场发布了一个应用程序 从开发者控制台来看 我的用户中大约有 1 2 遇到了这个问题 1 2 的比例很小 但人们更倾向于在某些内容不起作用时留下评论 而不是在它起作用时留下评论 这可能会对下载产生负面影响 不幸的是 开发人员控制台仅
  • 如何在 django 中使用单个提交按钮提交多个表单?

    我已经成功使用 modelformset factory 创建了我需要的表单 avaluos Avaluo objects filter Estatus contains CONCLUIDO Factura isnull True Fact
  • 格式化多维数组 Python

    如何编写代码来更改多维数组中每个单独数组的值a出现负值后立即归零 所以里面的第二个数组a有负值 12 34 5 6 88 10 30 75 10 会将其所有值及其后的值转为零 将数组变成 12 34 5 6 88 0 0 0 我怎样才能获得
  • 公共地理推文是否选择 Twitter 的 Search 或 Streaming API?

    我想开发一个 Android 应用程序 它将根据用户的 当前 指定 位置从 Twitter 公共时间线获取地理标记的推文 我将有一个刷新按钮 如果在特定时间可用 将获取更多推文 自定义大小最多 30 条 那么哪个API适合这种情况呢 搜索
  • Python:如何下载 blob url 视频?

    我想使用 Python 脚本从网站下载视频 但是该视频由如下 Blob URL 提供
  • 在 Windows 8 应用程序中为 DispatcherTimer 的 Tick 事件定义事件处理程序

    我正在 Windows 8 Visual studio 11 中开发一个应用程序 我想为 DispatcherTimer 实例定义一个事件处理程序 如下所示 public sealed partial class BlankPage Pag
  • 在 python 中使用 pandas 计算行的出现次数

    我有一个包含数千行和 4 列的 pandas 数据框 IE A B C D 1 1 2 0 3 3 2 1 3 1 1 0 有没有办法统计某一行出现了多少次 例如 可以找到多少次 3 1 1 0 并返回这些行的索引 如果你只寻找一行 那么我
  • 导出 .jar 时出现 FileNotFoundException

    在我的客户端 服务器应用程序中 我需要发送一些文件 txt doc等 从客户端到服务器 当我在 Eclipse 中运行代码时 它可以工作 但是当我导出 Applet 的签名 JAR 时 它不能工作 它抛出一个FileNotFoundExce
  • 我们如何更改数据表中搜索字段的宽度

    我可以更改 dataTables 中搜索文本字段的宽度吗 我现在正在编写以下代码 但它不起作用 example dataTable columnFilter sPlaceHolder head before aoColumns type t
  • 为所有子文件夹设置 git 配置值

    我知道可以设置每个存储库的配置来覆盖用户级配置 即 path to my repo gitconfig覆盖 gitconfig 是否可以设置 git 配置来覆盖给定文件夹的所有子文件夹的用户级设置 即 我有 topLevelFolder1
  • iOS 13 beta 外部屏幕上的 OverscanCompensation

    我正在测试一个应用程序的测试版 但遇到了外部屏幕的问题 我们看到应用程序周围有黑色边框 我们之前可以通过设置来纠正它overscanCompensation to none但在 iOS 13 中 该设置根本没有任何效果 我们曾经看到一个错误
  • 在没有匹配器的情况下如何跳过specs2中的测试?

    我正在尝试使用 scala 中的 specs2 测试一些与数据库相关的内容 目标是测试 db running 然后执行测试 我发现如果数据库关闭 我可以使用 Matcher 类中的 orSkip 问题是 我正在获取一个匹配条件的输出 作为
  • `dplyr::_join` 函数的命名向量“by”参数[重复]

    这个问题在这里已经有答案了 我正在写一个函数dplyr join两个数据框by不同的列 第一个数据帧的列名称动态指定为函数参数 我相信我需要使用rlang准引用 元编程 但未能找到可行的解决方案 我很感激任何建议 library dplyr