平均连续测量R上的气象参数

时间:2014-02-13 09:57:34

标签: r continuous

我对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

2 个答案:

答案 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