dplyr 用动态列进行总结

2024-03-16

我正在尝试对我的 postgres 数据库使用 dplyr 并执行一个简单的函数。 如果我直接解析列名,一切都会正常,但是我想动态地执行此操作(即对另一个数据帧中的每个列名进行排序)

我遇到的问题是对于前两个计算,我得到了正确的结果

假设第一个动态列称为“id”

pull_table %>%
    summarise(
        row_count = n(), 
        distinct_count = n_distinct(var) , 
        distinct_count_minus_blank = n_distinct(ifelse(var=="",NA,var)), 
        maxvalue = max(var), 
        minvalue = min(var), 
        maxlength = max(length(var)), 
        minlen = min(length(var))
    )  %>% 
    show_query()

当你看到 sql 时,我得到的错误结果是显而易见的 - 有时 id 周围有 '' 所以它作为字符串计算:

<SQL>
SELECT 
    COUNT(*) AS "row_count", 
    COUNT(DISTINCT id) AS "distinct_count", 
    COUNT(
        DISTINCT CASE 
            WHEN ('id' = '') THEN (NULL) 
            WHEN NOT('id' = '') THEN ('id') 
        END) AS "distinct_count_minus_blank", 
    MAX('id') AS "maxvalue", 
    MIN('id') AS "minvalue", 
    MAX(LENGTH('id')) AS "maxlength", 
    MIN(LENGTH('id')) AS "minlen"
FROM "table"

从这个输出中您可以看到,有时计算发生在列上,但有时只发生在字符串“id”上。这是为什么?如何修复它,以便它根据实际列而不是字符串进行计算?


我认为你应该看看rlang::sym(这是由进口dplyr).

假设pull_table是一个数据框,包括id, some_numeric_variable and some_character_variable列,你可以这样写:

xx = sym("id")
yy = sym("some_numeric_variable")
ww = sym("some_character_variable")
pull_table %>%
    summarise(
        row_count = n(), 
        distinct_count = n_distinct(!!xx) , 
        distinct_count_minus_blank = n_distinct(ifelse(var=="", NA, !!xx)), 
        maxvalue = max(!!yy ), 
        minvalue = min(!!yy ), 
        maxlength = max(length(!!ww)), 
        minlen = min(length(!!ww))
    )

The sym()函数转astring变量变为name,可以在 dplyr 函数内使用以下命令取消引用!!操作员。如果您想了解更多信息,请查看准引用文档 https://rlang.r-lib.org/reference/quasiquotation.html or 这本教程 https://cran.r-project.org/package=dplyr/vignettes/programming.html.

不幸的是,由于我没有任何tbl_sql手头的,我无法测试它show_query.

附带建议:永远不要将变量命名为“var”var也是方差函数。我多次把头发扯下来,只是因为这弄乱了一些包或自定义功能。

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

dplyr 用动态列进行总结 的相关文章

  • R Data.Table 创建带有条件的变量

    我需要在下面的数据集中创建一个新变量 A X a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 The newvar如果X等于 2 5 7 或 9 否则 newvar应该是 0 Code dt1 lt dat
  • 按具有作业的组划分的 R 分位数

    我有以下 df group rep seq 1 3 30 variable runif 90 5 0 7 5 df data frame group variable 我需要 i 按组定义分位数 ii 将每个人分配到相对于其组的分位数 因此
  • 优化 R 中的嵌套 for 循环

    我尝试加速下面的代码 但没有成功 我读到Rfast https cran r project org web packages Rfast Rfast pdf包 但我也未能实现该包 有没有办法优化R中的以下代码 RI lt function
  • 在ggplotly散点图中添加自定义数据标签

    我想显示Species对于每个数据点 当光标位于该点上方而不是 x 和 y 值时 我用iris数据集 另外 我希望能够单击数据点以使标签持久存在 并且当我在图中选择新位置时标签不会消失 如果可能的话 最基本的是标签 持久性问题是一个优点 这
  • 编写健壮的 R 代码:命名空间、屏蔽和使用 `::` 运算符

    简洁版本 对于那些不想阅读我的 案例 的人来说 这就是本质 最小化新包破坏现有代码 即编写您编写的代码 的机会的推荐方法是什么尽可能坚固 充分利用该功能的推荐方法是什么 命名空间机制 when a just using贡献的软件包 比如在一
  • 将天气 iframe 嵌入到 Shiny Dashboard 中

    我正在尝试将 Forecast io 的天气预报嵌入到闪亮的仪表板中 我最初在使用 符号时遇到了麻烦 但看到一篇文章提供了如何使用特殊字符格式化 HTML 代码的示例 但是 当我运行该应用程序时 我看到一个简单的 未找到 即使我知道该链接有
  • 将 read.csv 与符号链接文件一起使用

    我正在尝试做什么 我的源文件非常大 我想避免将其复制到其他文件夹中 我决定创建一个指向大文件的符号链接并想使用read csv读取文件 文件夹结构 项目1 数据 源文件 csv 项目2 数据 别名到源文件 csv 什么地方出了错 读取源文件
  • 使用starts_with() 将 NA 替换为 0

    我正在尝试替换我的一组特定列的 NA 值tibble 这些列都以相同的前缀开头 所以我想知道是否有一种简洁的方法来使用starts with 函数从dplyr包可以让我做到这一点 我已经看到了有关 SO 的其他几个问题 但是它们都需要使用特
  • 以编程方式触发 R 传单中的标记鼠标单击事件以获得闪亮效果

    我的问题与此相同 在 R 传单中触发标记鼠标单击事件以获得闪亮效果 https stackoverflow com questions 56962857 trigger marker mouse click event in r leafl
  • 如何将 R 数据框中的多个字符列合并为单个列

    我正在处理人口普查数据 需要将四个字符列合并为一列 Example LOGRECNO STATE COUNTY TRACT BLOCK 60 01 001 021100 1053 61 01 001 021100 1054 62 01 00
  • 连接多个用户的 R 闪亮会话

    最小可重现示例 library shiny ui lt fluidPage actionButton button1 Run 1 actionButton button2 Run 2 server lt function session i
  • 从向量中删除元素在 R 中出现的时间量

    我想从一个向量中删除元素在另一个向量中出现的时间 就像我要减去它们一样 鉴于我想要删除的元素向量中的每个元素也存在于我想要从中删除的主向量中 a lt c A B B C C C b lt c A B C C a a in b return
  • 将 RDS 文件从网络(即 URL)直接加载到 R 中?

    read csv 具有直接从 url 读取的出色能力 readRDS 才不是 我想将 RDS 文件从 Internet 移动到我的 R 环境 我看到有几种方法 Method 1 此方法会用下载的文件弄乱工作目录 myurl lt https
  • 如何在 R 中为回归量创建“宏”?

    对于长且重复的模型 我想创建一个 宏 在 Stata 中称为 宏 并通过以下命令完成 global var1 var2 其中包含回归量的模型公式 例如来自 library car lm income education prestige d
  • 在 Shiny 中叠加两个 ggplot

    我有一个非常大的数据集 我正在使用 ggplot 在 Shiny 上绘制它 我有一个与 x 轴上的值相关联的滑块 我想用它对选定的数据子集重新着色 并让其余数据保持原样 最简单的选择是重新创建整个绘图 但由于它是一个大型数据集 因此这是一个
  • 聚合日期时间以总结在特定条件下花费的时间

    我很困惑我应该如何继续 我下面有一些虚拟数据 Date lt as POSIXct c 2018 03 20 11 52 25 2018 03 22 12 01 44 2018 03 20 12 05 25 2018 03 20 12 10
  • stat_function 从函数生成平线

    我有以下代码 library ggplot2 f lt function x if x gt 2 1 x 0 3 else 0 graph lt ggplot data frame x c 0 10 aes x graph lt graph
  • 如何使用 R 中的函数 sqlSave() 将数据附加到具有 IDENTITY 主键的 SQL Server 表?

    我在SQL Server中创建了一个表 如下所示 CREATE TABLE testPK ID INT NOT NULL IDENTITY 1 1 PRIMARY KEY NumVal NUMERIC 18 4 现在我想使用 RODBC 函
  • 美人鱼图:调整图表周围的空白

    我在用 Rstudio 编译的 Rmd 报告中使用了美人鱼图 在 HTML PDF 输出中 图表上方和下方有大量空白 请参见下面的示例 Header Text r library DiagrammeR mermaid graph TD cl
  • R闪亮:使用闪亮的JS从数据表中获取信息

    我想读出所有列名称以及它们在数据表中显示的顺序 由于不同的原因 我无法使用 stateSave 等选项 我对 JS 没有什么把握 但我确信用它可以完成 所以我需要你帮助我 我尝试过类似的代码片段 datatable data callbac

随机推荐

  • 为什么Python的导入不能像C的#include那样工作?

    我实际上已经尝试理解 Python 导入大约一年了 我几乎放弃了 Python 编程 因为它看起来太混乱了 我有 C 语言背景 我认为import工作就像 include 但是如果我尝试导入某些内容 我总是会遇到错误 如果我有两个这样的文件
  • 在 RMI 期间知道端口号

    有没有办法在RMI过程中同时知道客户端和服务器的端口号 当在 RMI 过程中向客户端返回结果时 客户端下次请求该结果时 客户端和服务器之间的对话是否会在与上次相同的端口上 当服务器自第一个结果返回后一直在运行时或新的端口已创建 例如 cal
  • 动态传递参数

    我正在尝试使用 ExtJS 4 将图像从数据库检索到数据视图 现在我需要动态传递参数 主要是这里 Ext define pkgName v02x003001 SV02X00300102 extend Ext view View alias
  • 下载 Excel 文件时帧加载中断

    我有一个 Angular 脚本 它会访问我的服务器并获取一些数据 该调用如下所示 http post url success function response Do some work Go to the link that the se
  • Jquery上下移动行

    我使用了给出的代码here https stackoverflow com questions 1569889 jquery move table row使用 jquery 在 gridview 中向上 向下移动行 这工作得很好 但是如何实
  • 使用 Kafka 和 NodeJS 进行实时通知

    在我的项目中 我必须设计一个实时通知系统 我就是这样做的 如下图所示 你可以看到我使用 Kafka 作为队列消息系统 并使用 NodeJS 来构建 Websocket Server 和 Kafka Consumers 生产者将收集通知数据并
  • 构建失败,显示 500,请在服务器上运行“jupyter lab build”以获得 Jupyter lab 中的完整输出

    我正在尝试在 jupyter 实验室中添加扩展 我转到扩展选项卡并单击扩展上的 安装 几秒钟后我收到一个弹出窗口说Build failed with 500 please run jupyter lab build on the serve
  • 是否可以将自定义域从一个 Web 应用程序移动到另一个 Web 应用程序?

    我为网络应用程序 webapp a 配置了一个自定义域 www abc com 我想将其转移到 webapp b 而无需停机 如果我尝试将域添加到 webapp b 我会得到 主机名 www abc com 已分配给另一个 Azure 网站
  • Boost R-tree支持层次遍历吗?

    看来R tree http www boost org doc libs 1 61 0 libs geometry doc html geometry reference spatial indexes boost geometry ind
  • Javascript:将日期时间转换为 DD/MM/YYYY - 时间?

    我有一个datetime看起来像这样 2017 04 17 18 26 03 如何使用 javascript 或 jquery 将其转换为这种格式 17 04 2017 18 26 我发现这个问题我认为可能对我有帮助 但答案是转换时间戳 但
  • 添加了空的默认 XML 命名空间 xmlns="" 属性?

    我有简单的代码 我创建根元素并将子元素附加到它 问题是孩子追加了空xmlns 属性 虽然我不期望它 这只是第一个孩子的问题 第二个嵌套级别的孩子已经可以了 所以 下面的代码 DocumentBuilder builder factory n
  • 使用 mvc 身份使用电话号码而不是电子邮件注册

    我的网络应用程序有一个要求 我需要使用电话号码而不是电子邮件和密码来注册用户 系统应输入用户的电话号码并向该电话号码发送 OTP SMS 如果 OTP 匹配 我需要创建用户 我尝试使用 asp net 身份进行 2FA 但它仅在用户已注册并
  • 如何从同一类javascript中的方法返回对象数组

    我是 JavaScript 新手 我想要一个类方法返回由同一类实例化的对象数组 怎么做 目前 基本上以下是我所讨论的代码的一般结构 class myClass constructor name password emailid id thi
  • 我可以在 schema.org 丰富摘要的 Span 标记中使用多个 ItemProps 吗?

    假设我想向以下句子添加丰富的摘要 我在纽约生活和工作 由于纽约既是我的居住地 也是我工作的城市 理论上我希望使用 schema org 标准来标记该行 div I live and work in span New York span di
  • 预先输入下拉列表中的全局页脚

    我有一个包含 2 个类别的预输入菜单 但在这些类别下我需要一个按钮 如何添加此全局页脚 以便在缺少第二个类别时可用 我所做的是在每个数据集中添加一个页脚 但使用 CSS 隐藏除最后一个之外的所有数据集 代码如下 search query t
  • 如何更改 selected.js 中警报的语言?

    When you type in an unavailable option in the multiple select box in chosen js it will generate the output No results ma
  • 锁定整个数据库?

    我有非常奇怪的用户需求 我试图向他们解释有更好的方法来支持他们的业务流程 但他们不想听 我很想走开 但我首先想看看是否还有其他方法 有什么方法可以锁定整个数据库而不是行锁或表锁 我知道我也许可以将数据库置于单用户模式 但这意味着一次只有一个
  • Maven Surefire:无法分叉并行测试执行

    使用 Maven Surefire 我无法分叉并行测试执行 也就是说 我的每个测试用例都必须在单独的 JVM 中运行 因此需要分叉 此外 我希望我的测试用例并行运行 第一部分工作没有问题 我能够在自己的 JVM 中运行每个测试用例 然而 第
  • 如何在不实际构建东西的情况下使 gradle 下载依赖项

    到了新的环境gradle build需要相当长的时间 因为必须下载所有依赖项 有没有办法只下载依赖项以加快后续构建的速度 这样我们就可以预先填充 CI 构建环境 编辑 针对 Gradle 6 进行了更新 一些注意事项 这种新方法将 jar
  • dplyr 用动态列进行总结

    我正在尝试对我的 postgres 数据库使用 dplyr 并执行一个简单的函数 如果我直接解析列名 一切都会正常 但是我想动态地执行此操作 即对另一个数据帧中的每个列名进行排序 我遇到的问题是对于前两个计算 我得到了正确的结果 假设第一个