如何通过使用 dplyr 或其他包在 R 中具有最小值和最大值的查询来实现组?

Posted

技术标签:

【中文标题】如何通过使用 dplyr 或其他包在 R 中具有最小值和最大值的查询来实现组?【英文标题】:How to implement a group by query having min and max in R using dplyr or other package? 【发布时间】:2019-02-01 01:41:54 【问题描述】:

如何使用 dplyr 包在 R 中实现这个查询?

df2 = sqldf('select A, B, min(C), count(distinct(d))
               from df1
              where A = 1
                and B = "xyz"
              group by A, B')

我目前正在使用 sqldf 以提高性能,我想使用 dplyr 或任何其他合适的包。

【问题讨论】:

看看db.rstudio.com/dplyr。 【参考方案1】:

这行得通吗?

df2=filter(df1,A==1 & B == "xyz")%>% group_by(A,B)%>%
  summarise(min_C=min(C), min_d=max(d), med_E=median(E))

【讨论】:

【参考方案2】:

为了提高这个查询的性能

df2 = sqldf('select A, B, min(C), max(d), median(E)
           from df1
          where A = 1
            and B = "xyz"
          group by A, B')

确保您在表 df1 列 A、B 上有索引

create index my_idx ON df1 (A, B)

create index my_idx ON df1 (A, B, C, D,E)

第二种方式..直接从索引中检索所有值,减少对数据表的访问

【讨论】:

谢谢。我正在寻找使用 R 命令和包而不是标准 SQL 实践(例如索引)的东西。我们可以使用 say dplyr 或其他包编写和等效查询吗? 当您使用 SQL 进行查询时,您可以使用命令创建索引 .. .. 所以您可以简单地使用 sqldf(' create index my_idx ON df1 (A, B, C, D,E)') 。 ..记住数据访问的性能是基于mysql db引擎的..并且改变问题..回答不公平.. 再次感谢,但这是公平的,因为在我最初的问题本身中,我曾提到我特别想使用 dplyr 或任何其他 R 包,因为我专门寻找 R 特定答案而不是一般 SQL.answer .因此我不得不改变以避免非 R 答案。

以上是关于如何通过使用 dplyr 或其他包在 R 中具有最小值和最大值的查询来实现组?的主要内容,如果未能解决你的问题,请参考以下文章

如何按组进行汇总并使用R中的dplyr获取总体数据集的摘要

在 R 中使用 dplyr 在 group_by 之后应用自定义函数

如何在 R 中 dplyr::inner_join 多个 tbls 或 data.frames

r/dplyr:在 UDF 中使用动态命名的变量

R语言使用ggplot2可视化:使用ggpattern包在分组条形图中添加自定义条纹图案添加阴影条纹或其他图案或纹理(add hatches, stripes or another pattern

R 在使用 dplyr 或 RPostgreSQL 的模式下访问 redshift 表