当前位置 : 主页 > 手机开发 > 其它 >

在R中的“周”箱中聚合平均值“%H%M”

来源:互联网 收集:自由互联 发布时间:2021-06-22
我一直在努力解决这个问题.我是使用ts数据和所有相关R包的新手. 我有一个带有几个变量的df,包括GMT“%H%M”中的“一天中的时间”和日期“%Y /%m /%e”采样.我想将我的日期数据分
我一直在努力解决这个问题.我是使用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)?还是其他一些套餐?

EDITS /澄清
这是我的完整数据集样本的输出输出.我有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”的东西,这对于聚合来说已经足够了.

那么你需要将代表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")

et Voila.

> 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中没有相关日期的时候推动它很棘手.我很乐意听到其他人有更好的方法来做这件事.

网友评论