【问题标题】:在聚合函数中以原始顺序返回数据
【发布时间】:2021-12-28 13:00:26
【问题描述】:

我查看了一些已经提供的答案,但它们并没有真正为我工作。我正在尝试使用聚合函数聚合数据集(从每小时到每日值)。 我使用了以下内容:

agg <- aggregate(sapply(original_data[,3:4], as.numeric) ~ date, data = original_data, mean, na.rm = T)

它以某种方式工作,即生成的每日平均值是正确的,但它返回一个混合了日期顺序的数据框,例如我的日期格式是 YYYY.MM.D 格式的单列(例如 2000.1 .1 表示 2000 年 1 月 1 日),但在输出数据框中,月份运行 1、12、2、3、4,天运行 1、10、11 等,而不是预期的顺序。

这看起来很奇怪,我不知道为什么会发生这种情况。有没有一种简单的方法可以确保函数按原始顺序返回数据?

【问题讨论】:

    标签: r aggregate-functions


    【解决方案1】:

    你可以使用dplyr::arrange():

    agg <- dplyr::arrange(aggregate(sapply(original_data[,3:4], as.numeric) ~ date, data = original_data, mean, na.rm = T), as.Date(date))
    

    按照您的描述安排日期的原因是因为它们不是classDate。您可以通过运行class(original_data$date) 来检查这一点。

    这是一个使用示例数据的示例:

    original_data <- data.frame(date = c("2020-01-01", "2020-10-01", "2020-12-01", "2020-2-01"),
                                number1 = c(5, 10, 23, 10),
                                number2 = c(40, 50, 60, 70))
    
    当你安排日期为character:
    aggregate(sapply(original_data[,2:3], as.numeric) ~ date, data = original_data, mean, na.rm = T)
    
    当你安排日期为date:
    dplyr::arrange(aggregate(sapply(original_data[,2:3], as.numeric) ~ date, data = original_data, mean, na.rm = T), as.Date(date))
    

    【讨论】:

    • 太棒了。稍加修修补补就奏效了。谢谢。
    猜你喜欢
    • 2019-07-28
    • 2017-07-18
    • 2012-08-05
    • 1970-01-01
    • 2018-11-19
    • 2018-11-28
    • 2021-08-23
    • 2018-10-26
    • 2017-02-10
    相关资源
    最近更新 更多