【问题标题】:R - SQL aggregate min and maxR - SQL 聚合最小值和最大值
【发布时间】:2017-08-31 15:46:56
【问题描述】:

目前,我想从iris 数据集中输出数据帧,该数据集将涵盖以下查询:

SELECT MIN(Sepal.Width), MAX(Sepal.Width), Sepal.Length, species FROM iris GROUP BY Sepal.Length, species

我创建了那个代码:

query<-as.data.frame(aggregate(. ~ Sepal.Length, species, data = iris, FUN = function(x) c(min = min(x), maxi = max(x) ) ))

但它没有输出我预期的结果。我在 sqldf 和 dplyr 中这样做了,但我的问题是:

如何仅使用R-Base 函数来做到这一点?

【问题讨论】:

    标签: sql r max aggregate min


    【解决方案1】:

    你很亲密。您的问题是aggregate 使用by 的公式接口而不是,而不是两者结合使用。如果你想用多个组从 sql 中模仿 GROUP BY,请将它们放在公式的右侧。

    query<-as.data.frame(aggregate(. ~ Species+Sepal.Length, 
                               data = iris, 
                               FUN = function(x) c(min = min(x), maxi = max(x) ) ))
    

    如果您只对一个特征感兴趣,请将其替换为公式左侧的 .

    query<-as.data.frame(aggregate(Sepal.Width ~ Species+Sepal.Length, 
                               data = iris, 
                               FUN = function(x) c(min = min(x), maxi = max(x) ) ))
    

    【讨论】:

    • 谢谢,但是这个解决方案提供了 3 个变量,并且不输出“Sepal.Width”变量的最小值和最大值。我的斗争是 - 如何从 Sepal.Width 为每个组输出最小值和最大值?
    • @Klaus012 我不确定我是否理解您的问题。如果您只想按物种的 Sepal.Width 的最大值和最小值,只需使用 Sepal.Width~Species 作为您的公式
    • 没错,我确实是这样,函数也从min = min(x) 更改为mini = min(x),但只有3 个变量,而不是4 个(4 = min(sepal.width), max(sepal .width)、种类和萼片.length)
    • 如果你想要按物种和 Sepal.Length 聚合的 Sepal.Width,只需将它们全部包含在你的公式中,例如Sepal.Width ~ Species+Sepal.Length。您可以将此处的公式视为[我想将函数应用于的事物] ~ [我希望它们聚合的变量]
    • 是的,这我当然明白,但我在功能上很挣扎。就像它不起作用(它不会在两个单独的列中输出最小值和最大值),我不知道为什么,因为它可以编译并且应该可以正常工作。
    猜你喜欢
    • 2019-08-03
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    相关资源
    最近更新 更多