gpt4 book ai didi

每个时间段连续 n 分钟的滚动最低平均值和标准差

转载 作者:行者123 更新时间:2023-12-04 11:14:24 25 4
gpt4 key购买 nike

新的 R 用户在这里寻找指导。我正在处理一个 15 分钟的数据集,并希望通过一个变量(在我的例子中是建筑物)为一年中的每一天解析出以下内容:(1) n 个连续行的“值”的最低平均值(最好是 2 或 3 小时的值)(2)同期标准差

示例 df:

    variable    year month day hr min   date     value
building_a 2018 6 2 0 0 6/2/2018 19
building_a 2018 6 2 0 15 6/2/2018 19
building_a 2018 6 2 0 30 6/2/2018 19
building_a 2018 6 2 0 45 6/2/2018 17
building_a 2018 6 2 1 0 6/2/2018 17
building_a 2018 6 2 1 15 6/2/2018 15
building_a 2018 6 2 1 30 6/2/2018 15
building_a 2018 6 2 1 45 6/2/2018 14
building_a 2018 6 2 2 0 6/2/2018 14
building_a 2018 6 2 2 15 6/2/2018 13
building_a 2018 6 2 2 30 6/2/2018 13
building_a 2018 6 2 2 45 6/2/2018 13
building_a 2018 6 2 3 0 6/2/2018 12
building_a 2018 6 2 3 15 6/2/2018 14
building_a 2018 6 2 3 30 6/2/2018 13
building_a 2018 6 2 3 45 6/2/2018 13
building_b 2018 6 2 0 0 6/2/2018 37
building_b 2018 6 2 0 15 6/2/2018 41
building_b 2018 6 2 0 30 6/2/2018 38
building_b 2018 6 2 0 45 6/2/2018 39
building_b 2018 6 2 1 0 6/2/2018 37
building_b 2018 6 2 1 15 6/2/2018 36
building_b 2018 6 2 1 30 6/2/2018 34
building_b 2018 6 2 1 45 6/2/2018 34
building_b 2018 6 2 2 0 6/2/2018 35
building_b 2018 6 2 2 15 6/2/2018 35
building_b 2018 6 2 2 30 6/2/2018 29
building_b 2018 6 2 2 45 6/2/2018 32
building_b 2018 6 2 3 0 6/2/2018 30
building_b 2018 6 2 3 15 6/2/2018 33
building_b 2018 6 2 3 30 6/2/2018 30
building_b 2018 6 2 3 45 6/2/2018 32

我已经能够使用以下方法针对一小时的片段执行此操作,但无法弄清楚如何使其适应更大的窗口(例如,最低 135 分钟平均值而不是 60 分钟)。

    tmp <- aggregate(value~variable+date+hour, df, 
function(x)
c(mean = mean(x), sd = sd(x)))

tmp2 <- do.call("data.frame",tmp)
tmp2$value.mean <- as.numeric(tmp2$value.mean)
tmp2$value.sd <- as.numeric(tmp2$value.sd)

tmp2_flat <- tmp2 %>%
group_by(variable, date) %>%
filter(value.mean == min(value.mean)) %>%
arrange(variable, date, value.sd) %>%
slice(1)

提前感谢您的任何建议

最佳答案

我玩了一会儿,这是我想出的:

更新:最后的答案不太可行。没有反馈,但我正在改变它。

library(zoo)
library(dplyr)

df %>%
group_by(variable, date) %>%
mutate(minimum = rollapply(value, width = 4, FUN = mean, fill = NA, align = "right"),
sd = rollapply(value, width = 4, FUN = sd, fill = NA, align = "right")) %>%
slice(which.min(minimum))

# A tibble: 2 x 10
# Groups: variable, date [2]
variable year month day hr min date value minimum sd
<fct> <int> <int> <int> <int> <int> <fct> <int> <dbl> <dbl>
1 building_a 2018 6 2 3 0 6/2/2018 12 12.8 0.5
2 building_b 2018 6 2 2 30 6/2/2018 29 33.2 2.87

然而,这个想法仍然是一样的。在 rollapply() 函数中,可以通过 width= 参数指定连续行的 n4 在这种情况下表示 4 * 15 分钟 = 1 小时,但可以是任意数量的刻钟。它通过回顾 width 行来计算每行的 value 的“移动平均值”。

我希望这应该能做到。

关于每个时间段连续 n 分钟的滚动最低平均值和标准差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55199798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com