在R中的“周”箱中聚合平均值“%H%M”
我一直在努力解决这个问题.我是使用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,并且会感谢任何提示! EDITS /澄清 > 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中没有相关日期的时候推动它很棘手.我很乐意听到其他人有更好的方法来做这件事. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |