Jan*_*nke 1 aggregate r dataframe
我面临着将数据汇总到日常数据的问题.我有一个数据框,其中删除了NA(下面给出了数据图片的链接).数据每天收集3次,但有时由于NAs,每天只有1或2个条目; 有些日子数据完全丢失了.
我现在有兴趣计算"dist"的每日平均值:这意味着总结一天的"dist"数据并将其除以每天的条目数(如果当天没有数据丢失则为3).我想通过一个循环来做到这一点.我怎么能用循环来做这个?问题是,有时我每天有3个条目,有时只有2个甚至1个.我想告诉R 每天,它应该总结"dist"并将其除以每个可用的条目数天.
我根本不知道如何为此目的制定for循环.如果你能就这个问题给我任何建议,我将不胜感激.感谢您的努力和亲切的问候,
一月
数据框:http://www.pic-upload.de/view-11435581/Data_loop.jpg.html
编辑:我按照建议使用了aggregate和tapply,但是,数据的平均值并没有真正计算:
Group.1 x
1 2006-10-06 12:00:00 636.5395
2 2006-10-06 20:00:00 859.0109
3 2006-10-07 04:00:00 301.8548
4 2006-10-07 12:00:00 649.3357
5 2006-10-07 20:00:00 944.8272
6 2006-10-08 04:00:00 136.7393
7 2006-10-08 12:00:00 360.9560
8 2006-10-08 20:00:00 NaN
Run Code Online (Sandbox Code Playgroud)
使用的代码是:
dates<-Dis_sub$date
distance<-Dis_sub$dist
aggregate(distance,list(dates),mean,na.rm=TRUE)
tapply(distance,dates,mean,na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)
不要使用循环.使用R.一些示例数据:
dates <- rep(seq(as.Date("2001-01-05"),
as.Date("2001-01-20"),
by="day"),
each=3)
values <- rep(1:16,each=3)
values[c(4,5,6,10,14,15,30)] <- NA
Run Code Online (Sandbox Code Playgroud)
和任何:
aggregate(values,list(dates),mean,na.rm=TRUE)
tapply(values,dates,mean,na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)
给你你想要的.另见?aggregate和?tapply.
如果你想要一个数据帧,你可以查看包plyr:
Data <- as.data.frame(dates,values)
require(plyr)
ddply(data,"dates",mean,na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)
请记住,ddply尚未完全支持日期格式(尚未).