如何使用管道将数据帧列作为函数中的参数传递?

2024-02-27

我正在摆弄内置数据集economics在 R 中,我试图将数据帧列作为参数传递到使用管道的函数中(dplyr https://genomicsclass.github.io/book/pages/dplyr_tutorial.html, %>%)。但我遇到了一些看似奇怪的问题。不知何故,我无法成功地将列名作为参数传递给函数top_n() https://dplyr.tidyverse.org/reference/top_n.html在我的自定义函数中。以下是我对人口最多的 5 个国家进行子集划分的方法without自定义函数:

Code 1:

library(dplyr)

df_econ <- economics
df_top_5 <- df_econ %>% top_n(5, pop)
df_top_5

输出1:

2014-12-01  12122.0 320201  5.0 12.6    8688
2015-01-01  12080.8 320367  5.5 13.4    8979
2015-02-01  12095.9 320534  5.7 13.1    8705
2015-03-01  12161.5 320707  5.2 12.2    8575
2015-04-01  12158.9 320887  5.6 11.7    8549

包装到自定义函数中,它可能如下所示:

Code 2:

library(dplyr)

# data
data(economics)
df_econ <- economics

# custom function
fxtop <- function(df, number, column){

  tops <- df %>% top_n(number, column)
  return(tops)
}

# build a df using custom function
df_top_5 <- fxtop(df=df_econ, number=5, column='pop')
df_top_5

输出2:

1967-07-01  507.4   198712  12.5    4.5 2944
1967-08-01  510.5   198911  12.5    4.7 2945
1967-09-01  516.3   199113  11.7    4.6 2958
1967-10-01  512.9   199311  12.5    4.9 3143
1967-11-01  518.1   199498  12.5    4.7 3066
1967-12-01  525.8   199657  12.1    4.8 3018
1968-01-01  531.5   199808  11.7    5.1 2878
1968-02-01  534.2   199920  12.2    4.5 3001
1968-03-01  544.9   200056  11.6    4.1 2877
1968-04-01  544.6   200208  12.2    4.6 2709

此输出有 10 行,而不是预期的 5 行。我怀疑这个论点number=5被简单地忽略,实际使用的数字默认为10。数据似乎没有排序'pop' either.

到目前为止我尝试过的:

尝试1:硬编码pop and number在自定义函数中:

library(dplyr)

# data
data(economics)
df_econ <- economics

# custom function
fxtop <- function(df, number, column){

  tops <- df %>% top_n(5, pop)
  return(tops)
}

# build a df using custom function
df_top_5 <- fxtop(df=df_econ, number=5, column='pop')
df_top_5

尝试 1:输出:

2014-12-01  12122.0 320201  5.0 12.6    8688
2015-01-01  12080.8 320367  5.5 13.4    8979
2015-02-01  12095.9 320534  5.7 13.1    8705
2015-03-01  12161.5 320707  5.2 12.2    8575
2015-04-01  12158.9 320887  5.6 11.7    8549

尝试1: Comment

这就是想要的输出!

让我们看看当我通过函数传递变量时会发生什么

尝试2:将变量作为对象而不是字符串传递:

library(dplyr)

# data
data(economics)
df_econ <- economics

# custom function
fxtop <- function(df, number, column){

  tops <- df %>% top_n(5, column)
  return(tops)
}

# build a df using custom function
df_top_5 <- fxtop(df=df_econ, number=5, column='pop')
df_top_5

尝试 2:输出:

现在的输出与第一个示例中的相同。这两个变量似乎都被忽略了。

那么,有什么建议吗?


我们可以使用带有curly-curly ({{}})

library(dplyr)
library(rlang)

fxtop <- function(df, number, column){
   tops <- df %>% top_n(number, {{column}})
   return(tops)
}

并传递不带引号的变量名称

fxtop(df=df_econ, number=5, pop)

#   date        pce     pop psavert uempmed unemploy
#  <date>      <dbl>   <dbl>   <dbl>   <dbl>    <dbl>
#1 2014-12-01 12062  319746.     7.6    12.9     8717
#2 2015-01-01 12046  319929.     7.7    13.2     8903
#3 2015-02-01 12082. 320075.     7.9    12.9     8610
#4 2015-03-01 12158. 320231.     7.4    12       8504
#5 2015-04-01 12194. 320402.     7.6    11.5     8526

如果您想将列名作为字符串(带引号)传递,我们可以使用sym with !!

fxtop <- function(df, number, column){
  tops <- df %>% top_n(number, !!sym(column))
  return(tops)
}
fxtop(df=df_econ, number=5, 'pop')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用管道将数据帧列作为函数中的参数传递? 的相关文章

  • 使用“kde”函数进行 R 中的 5-D 核密度估计

    我想通过使用 R 的 ks 库中的 kde 函数来执行 5 维数据 x y z 时间 大小 的核密度估计 在它的手册中 它说它可以执行核密度估计1 至 6 维数据 手册第 24 页 http cran r project org web p
  • rgdax(coinbase)数据未按预期收集数据

    我正在尝试使用rgdaxR 包用于下载一些历史价格 我设置了 API 密钥等 并尝试在过去 24 小时内加载 start lt strftime Sys time Y m dT H M SZ tz UTC end lt strftime S
  • R中的预测和预测函数之间的区别

    两者之间有什么区别吗predict and forecast R 中的函数 如果是 在哪些具体情况下应该使用它们 Intro predict 适用于多种 R 对象 模型 基础库的一部分 forecast 对于时间序列 预测包的一部分 参见示
  • spplot 的图例范围和颜色分布问题

    我的绘图和图例中的颜色范围是否正确存在问题 这是我使用的代码 data ch4 lt read csv2 v42 CH4 1970 TOT txt skip 3 stringsAsFactors FALSE header F num dat
  • 使用两列数据分割数据帧并对结果数据帧列表应用通用转换

    我想根据两列中的值将一个大数据帧拆分为一个数据帧列表 然后 我想对结果列表中的所有数据帧应用通用数据转换 滞后转换 我知道 split 命令 但只能让它一次处理一列数据 您需要将所有想要分割的因素放在一个列表中 例如 split mtcar
  • 难以理解 R 中双括号和单括号子集之间的区别[重复]

    这个问题在这里已经有答案了 我很难理解双括号子集和单括号子集之间的区别 我在开源编程方面相当陌生 我很难理解 R 中的 help 函数 因为考虑到我目前对 R 的理解 其中的一些信息对我来说太技术性了 我尝试过谷歌搜索差异 虽然它给了我一个
  • 使用不同的阈值替换多列中的值

    我有一个包含多个列的数据集 其中包含我想要转换为二进制的定量数据 为此 我想使用每列不同的阈值 Example Input antigen1 antigen2 antigen3 antigen4 1 215 421 2 12 2 1524
  • 仅当 ggplot 中 y 轴的下限设置为 0 时才会出现图条[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个条形图 当我将限制设置为 0 7 时 就会出现条形 但是 我希望下限为 1 而不是 0 当我将下限设置为 1 时 条形图不会出现 我收到以下错误消息 Removed 8 rows contain
  • 从 glmnet 获取变量选择顺序

    我一直在使用 glmnet R 包为一个目标变量 Y 数字 和 762 个协变量构建 LASSO 回归模型 我使用 glmnet 函数 然后coef fit s 0 056360 获取该特定 lambda 值的系数值 我现在需要的是变量选择
  • R + ggplot2 - 无法分配大小为 128.0 Mb 的向量

    我有一个 4 5MB 9 223 136 行 的文件 其中包含以下信息 0 0 0 0147938 3 67598e 07 0 0226194 7 35196e 07 0 0283794 1 10279e 06 0 033576 1 470
  • dplyr::mutate 添加多个值

    网上有几个与此相关的问题dplyr Github 存储库 https github com hadley dplyr已经 并且至少有一个相关的问题 但没有一个问题完全涵盖了我的问题 我认为 在 dplyr mutate 调用中添加多列 ht
  • 在 R 中查找 Windows 用户名

    有没有办法在 R 会话中获取当前的 Windows 用户名或 Windows 主目录 Thanks 抱歉 如果我错过了什么 但我找不到任何东西 你可以做 Sys getenv USERNAME Sys getenv HOME 如果你只是输入
  • knn-相同的k,不同的结果

    我有一个矩阵ZZ 我跑完之后prcomp并选择了我收到的前 5 台电脑data new P prcomp zz data new P x 1 5 然后我分成训练集和测试集 pca train data new 1 121 pca test
  • 根据R中的特定行值将数据帧拆分为多个数据帧

    我需要根据数据帧中重复出现的标题行将数据帧拆分为 17 872 个数据帧 我需要将新创建的数据框存储在列表中 我的数据框看起来像 0 1 2 32 Alert Type Response 33 w1 x1 y1
  • 使用 ggplot 将条形图的列与线图的点对齐

    当线图的点与条形图的条具有相同的 x 轴时 有什么方法可以使用 ggplot 将它们对齐 这是我尝试使用的示例数据 library ggplot2 library gridExtra data data frame x rep 1 27 e
  • R 中自定义函数的等高线图

    我正在使用一些自定义函数 我需要根据参数的多个值为它们绘制轮廓 这是一个示例函数 我需要画这样的等高线图 任何想法 Thanks 首先你构造一个函数 fourvar它将这四个参数作为参数 在这种情况下 您可以使用 3 个变量来完成此操作 其
  • 删除ggplot2 geom_bar中没有数据的日期列[重复]

    这个问题在这里已经有答案了 我想隐藏 ggplot2 中没有数据的列 这是使用 nycflights13 库的可重现示例 library nycflights13 library dplyr library ggplot2 small da
  • 在前两个冒号上分割字符串

    我想在前两个冒号上拆分一列字符串 但不在任何后续冒号上拆分 my data lt read table text my string some data 123 34 56 78 100 87 65 43 21 200 a4 b6 c888
  • 在 R 的 stargazer 表中设置注释格式

    我在用stargazer包来生成 回归输出 表 一切都在奇迹般地进行 直到我开始编辑笔记 First 换行很难 但是 Bryansuggests https stackoverflow com questions 21720264 star
  • C中的pipe()和fork()

    我需要创建两个子进程 一个子进程需要运行命令 ls al 并将其输出重定向到下一个子进程的输入 而下一个子进程又将对其输入数据运行命令 sort r n k 5 最后 父进程需要读取该数据 已排序的数据 并将其显示在终端中 终端中的最终结果

随机推荐

  • 将 JSON 对象传递给 MVC 控制器时 string.empty 转换为 null

    我正在将一个对象从客户端传递到服务器 在此过程中 表示为 string empty 的对象属性将转换为 null 我想知道当对象类型支持 string empty 时如何防止这种情况 console log DataToPost dataT
  • 常见爬行-获取WARC文件

    我想使用常见的爬网检索网页 但我迷路了 我想要获取 www example com 的 warc 文件 我看到这个链接 生成以下 json urlkey com example 时间戳 20170820000102 mime text ht
  • 在 Safari iPhone 上的新选项卡中打开链接

    我有一个网站可以帮助人们为 Instagram 帖子创建标题并评估主题标签 其中一项功能非常简单 只需将主题标签链接到 Instagram 即可查看它们包含哪些类型的图像 因为我不希望他们刚刚输入和评估的输入消失 所以我使用 target
  • iOS 获取数组中选定联系人的电子邮件地址

    我想做的就是向用户展示人员选择器 让他选择他想要的所有联系人 最后将所有这些联系人的电子邮件地址放入数组中 最好的办法是只向用户显示带有电子邮件的联系人 到目前为止 我唯一能做的就是向人员选择器提供以下代码 ABPeoplePickerNa
  • 使用 css3 淡入淡出背景图像

    嘿大家 我想知道为什么这行不通 right article boy background transparent url images boxes bg boy jpg left top no repeat width 413px heig
  • 从 .net 向操纵杆发送反馈/效果

    感谢这个答案https stackoverflow com a 13734766 637142 https stackoverflow com a 13734766 637142我能够知道何时按下按钮或何时旋转方向盘 现在我的问题是如何将效
  • 如何解决 mingw32-make.exe 退出并出现代码 2 错误?

    我已经安装了Qt Open source 4 8 3适用于 Windows 的库Windows 8 Pro x64 Qt Creator 2 6 0 and MingW 4 4 0手动 我从 Qt Creator 设置了套件和编译器 我打开
  • 如何使 jQuery `bind` 或 `on` 事件处理程序具有幂等性

    有什么办法可以打电话吗 selector bind click handler or selector on click handler 多次以便处理程序仅附加一次 现在 我有多个具有不同成功回调的 AJAX 处理程序 每个处理程序都会在页
  • ng-class 和 ng-style 有什么区别?

    ng class and ng style两者似乎都是动态设置 CSS 类的方法 它们之间有什么区别 ng style https docs angularjs org api ng directive ngStyle用于将 javascr
  • svn复制命令

    我知道这是一个非常菜鸟的问题 但是当我尝试使用以下命令从现有分支 而不是主干 创建新分支时 svn copy svn ssh svn example com software branches branch name svn ssh svn
  • 将空字符串作为参数传递给 boost::program_options 的最佳方法是什么?

    我有一个程序使用升压 程序选项解析命令行 其中一个参数是 AMQP 交换的名称 并提供默认值 出于测试目的 我想用空字符串覆盖此 AMQP 交换名称 以使用默认交换 我不知道如何将空字符串传递给升压 程序选项 那可能吗 不修改源码 如果没有
  • VS Task Runner Explorer - Node Sass 找不到绑定

    打开 Visual Studio 任务运行程序资源管理器时 gulpfile js加载失败 并且在 输出 窗口中发出此错误 Failed to run C DATA Git MyApp MyBiz MyApp MyBiz MyApp Web
  • 基类与实用类

    两者应该优先选择哪一个 有一些方法由 A B 和 C 类调用 这些方法是否应该封装在 D 类 A B 和 C 的基础 中 OR 是否应该将这些方法封装在类 U 中 并且其他类创建其对象以根据需要使用这些方法 应该在什么基础上做出决定 Tha
  • Azure 机器学习 REST 端点 - 无法获取

    我创建了一个带有 REST 端点的 Azure 机器学习模型作为使用它的方式 当我使用 Postman 运行服务时 一切似乎都工作正常 但是 当我尝试使用 javascript 创建 HTML 网站 Codepen 来调用 REST 端点时
  • 在 Selenium IDE 中,如何通过下拉菜单中的索引选择选项?

    问题是选项标签发生变化 所以我无法按标签抓取 我需要通过说选项 0 来抓取 任何想法 我正在使用 Selenium IDE Firefox 这是我要问的部分 tr td select td td dateRangeString td td
  • 什么是 PDO?为什么要使用它?

    人们不断提到我在处理 MySQL 时应该在 PHP 中使用 PDO 我以前从未听说过这一点 什么是PDO 它是如何使用的以及有哪些优点和缺点 Thanks 将 PDO 视为与 PHP 一起打包的内置类 使您可以更轻松地与数据库进行交互 在开
  • 当字符串为空时将字符串值替换为“0”

    我从文本框中获取一个值并将其转换为十进制 但是 文本框值可能为空 那么 我该如何处理文本框中的空字符串呢 不幸的是 我有大约 50 个文本框需要处理 所以像 用 IF 条件检查 null 这样的答案对我没有帮助 如果我使用所有这些 IF 条
  • 从 GNU 到Solaris 的等效日期

    In GNU使用命令 date 我可以做到这一点 date d 4 day datei 20130101 i 5 date d datei i day 但我喜欢知道 我怎样才能在 Solaris 中做到这一点 使用日期命令 Tcl 有一个很
  • Pylance - pandas 方法的类型部分未知

    如果我尝试在严格模式下验证使用 pandas 方法和 pylance 的代码 则会收到验证错误 import pandas as pd ser pd Series float pd Series 1 2 5 3 print ser max
  • 如何使用管道将数据帧列作为函数中的参数传递?

    我正在摆弄内置数据集economics在 R 中 我试图将数据帧列作为参数传递到使用管道的函数中 dplyr https genomicsclass github io book pages dplyr tutorial html gt 但