我对R很新,我正试图找到一种方法将连续数据平均到特定的时间段。
我的数据是一个月记录几个参数,时间步长为1秒
通过read.csv
的表格在一列中包含日期和时间,其他几列包含值。
TimeStamp UTC Pitch Roll Heave(m)
05-02-13 6:45 0 0 0
05-02-13 6:46 0.75 -0.34 0.01
05-02-13 6:47 0.81 -0.32 0
05-02-13 6:48 0.79 -0.37 0
05-02-13 6:49 0.73 -0.08 -0.02
所以我想在特定的时间间隔内对数据进行平均:20分钟,例如以小时7:00的平均值,从小时6:41到7:00的所有点数,并返回此间隔的平均值等等,用于整个数据集。 时间间隔如下所示:
TimeStamp
05-02-13 19:00 462
05-02-13 19:20 332
05-02-13 19:40 15
05-02-13 20:00 10
05-02-13 20:20 42
答案 0 :(得分:1)
这是一个类似于您自己的可重复数据集。
meteorological <- data.frame(
TimeStamp = rep.int("05-02-13", 1440),
UTC = paste(
rep(formatC(0:23, width = 2, flag = "0"), each = 60),
rep(formatC(0:59, width = 2, flag = "0"), times = 24),
sep = ":"
),
Pitch = runif(1440),
Roll = rnorm(1440),
Heave = rnorm(1440)
)
您需要做的第一件事是将前两列合并以创建一个(POSIXct
)日期时间列。
library(lubridate)
meteorological$DateTime <- with(
meteorological,
dmy_hm(paste(TimeStamp, UTC))
)
然后为不同的时间分组设置一系列断点。
breaks <- seq(ymd("2013-02-05"), ymd("2013-02-06"), "20 mins")
最后,您可以计算每个组的摘要统计信息。有很多方法可以做到这一点。来自ddply
包的plyr
是一个不错的选择。
library(plyr)
ddply(
meteorological,
.(cut(DateTime, breaks)),
summarise,
MeanPitch = mean(Pitch),
MeanRoll = mean(Roll),
MeanHeave = mean(Heave)
)
答案 1 :(得分:0)
请查看这样简单的内容是否适合您:
myseq <- data.frame(time=seq(ISOdate(2014,1,1,12,0,0), ISOdate(2014,1,1,13,0,0), "5 min"))
myseq$cltime <- cut(myseq$time, "20 min", labels = F)
> myseq
time cltime
1 2014-01-01 12:00:00 1
2 2014-01-01 12:05:00 1
3 2014-01-01 12:10:00 1
4 2014-01-01 12:15:00 1
5 2014-01-01 12:20:00 2
6 2014-01-01 12:25:00 2
7 2014-01-01 12:30:00 2
8 2014-01-01 12:35:00 2
9 2014-01-01 12:40:00 3
10 2014-01-01 12:45:00 3
11 2014-01-01 12:50:00 3
12 2014-01-01 12:55:00 3
13 2014-01-01 13:00:00 4