加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 04:56:45 所属栏目:百科 来源:网络整理
导读:我一直在努力解决这个问题.我是使用ts数据和所有相关R包的新手. 我有一个带有几个变量的df,包括GMT“%H%M”中的“一天中的时间”和日期“%Y /%m /%e”采样.我想将我的日期数据分箱/汇总到“周”(即%W /%g)并计算在该周期间进行抽样时的平均“当天时间
我一直在努力解决这个问题.我是使用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,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,5.5,7.5,7.3,4.2,3,5,9.3,7.9,5.2,8,6,7),Greenland = c(0L,0L,40L,28L,34L,7L,27L,44L,59L,0L),date2 = structure(c(12617,12627,12631,12996,12669,13036,12670,13037,12671,13038,12672,13039,12997,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中没有相关日期的时候推动它很棘手.我很乐意听到其他人有更好的方法来做这件事.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读