gpt4 book ai didi

r - 在 R 中的 "%H%M"箱中聚合平均值 "week"

转载 作者:行者123 更新时间:2023-12-04 18:47:45 24 4
gpt4 key购买 nike

我已经为此苦苦挣扎了一段时间。我是使用 ts 数据和所有相关 R 包的新手。
我有一个带有几个变量的 df,包括 GMT 中“%H%M”和日期“%Y/%m/%e”采样发生的时间。我想将我的日期数据合并/聚合为“周”(即 %W/%g),并计算在该周发生采样时的平均“一天中的时间”。

通过首先将我的 df 转换为 zoo 对象,然后使用如下所示的 aggregate.zoo 命令,我能够计算数值变量(例如,重量)的其他 FUN:

#calculate the sum weight captured every week 
x2c <- aggregate(OA_zoo, as.Date(cut(time(OA_zoo), "week")), sum)

但是,我不确定如何解决我正在使用 Date 格式而不是 num 的事实,并希望得到任何提示!
此外,我显然已经通过分别处理我的每个变量进行了大量编码。是否有一种方法可以通过使用 plyr 聚合“每周”来在我的 df 上应用不同的 FUN (sum/mean/max/min)?或者其他一些包?

编辑/澄清
这是 dput我的完整数据集样本的输出。我有 2004-2011 年的数据。我想使用 ggplot2 查看/绘图的是随着时间的推移(2004-2011)在几周内聚合的 TIME (%H%M) 的平均值/中位数。现在,我的数据不是按周汇总的,而是每天汇总的(随机样本)。
> dput(godin)
structure(list(depth = c(878, 1200, 1170, 936, 942, 964, 951,
953, 911, 969, 960, 987, 991, 997, 1024, 978, 1024, 951, 984,
931, 1006, 929, 973, 986, 935, 989, 1042, 1015, 914, 984), duration = c(0.8,
2.6, 6.5, 3.2, 4.1, 6.4, 7.2, 5.3, 7.4, 7, 7, 5.5, 7.5, 7.3,
7.5, 7, 4.2, 3, 5, 5, 9.3, 7.9, 7.3, 7.2, 7, 5.2, 8, 6, 7.5,
7), Greenland = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 40L, 28L, 0L,
0L, 34L, 7L, 28L, 0L, 0L, 0L, 27L, 0L, 0L, 0L, 44L, 59L, 0L,
0L, 0L, 0L, 0L, 0L), date2 = structure(c(12617, 12627, 12631,
12996, 12669, 13036, 12669, 13036, 12670, 13036, 12670, 13037,
12671, 13037, 12671, 13037, 12671, 13038, 12672, 13038, 12672,
13038, 12672, 13039, 12631, 12997, 12673, 13039, 12673, 13039
), class = "Date"), TIME = c("0940", "0145", "0945", "2045",
"1615", "0310", "2130", "1045", "0625", "1830", "1520", "0630",
"0035", "1330", "0930", "2215", "2010", "0645", "0155", "1205",
"0815", "1845", "2115", "0350", "1745", "0410", "0550", "1345",
"1515", "2115")), .Names = c("depth", "duration", "Greenland",
"date2", "TIME"), class = "data.frame", row.names = c("6761",
"9019", "9020", "9021", "9022", "9023", "9024", "9025", "9026",
"9027", "9028", "9029", "9030", "9031", "9032", "9033", "9034",
"9035", "9036", "9037", "9038", "9039", "9040", "9041", "9042",
"9043", "9044", "9045", "9046", "9047"))

最佳答案

我会这样处理它:
首先创建一个带有代表星期的字符串的列:

godin$week <- format(godin$date2, "%Y-W%U")

这会给你类似 "2004-W26" 的东西,这对 aggregate 来说已经足够了.

那么您需要将代表 HHMM 的字符向量转换为实际时间,以便您可以对其使用时间数学。
godin$time2 <- as.POSIXct(strptime(godin$TIME, "%H%M"))

注意:以上内容有点坑... strptime()如果没有指定,则假定当前日期,但这不应该妨碍此特定应用程序,因为所有转换时间都将具有相同的日期,平均值的时间部分将是正确的。稍后我会取消约会...

那时,我认为您可以简单地汇总:
x2c <- aggregate(time2~week, data=godin, FUN=mean)

并摆脱不相关(和错误)的日期部分
x2c$time2 <- format(x2c$time2,"%H:%M:%S")

等瞧。
> x2c
week time2
1 2004-W29 09:40:00
2 2004-W30 01:45:00
3 2004-W31 13:45:00
4 2004-W36 12:07:00
5 2004-W37 10:32:30
6 2005-W31 12:27:30
7 2005-W36 10:48:20
8 2005-W37 13:11:06

这里的教训是,在 R 中没有关联日期的情况下插入时间是很棘手的。我很想听听其他有更好方法的人。

关于r - 在 R 中的 "%H%M"箱中聚合平均值 "week",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11524895/

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