计算 R 中时间序列的每一段的某些属性的均值和标准差

问题描述 投票:0回答:1

我的数据框给出了

dput(head(df))
的以下结果。

structure(list(X = c(243813.672143309, 243820.16680888, 243819.847679243, 
243816.851755806, 243814.016524682, 243817.173014157), Y = c(717413.771532459, 
717412.74899267, 717412.77789073, 717414.049964481, 717415.983508272, 
717414.873097992), T = structure(c(1617312606.186, 1617312614.186, 
1617312622.186, 1617312630.185, 1617312638.185, 1617312646.185
), class = c("POSIXct", "POSIXt"), tzone = "GMT"), sp = c(0, 
6.57466869906985, 0.320435364660776, 3.25480089593961, 3.43178191624026, 
3.34610770929176), ta = c(0, 0, 0.0658546845459325, 0.311226675793708, 
0.196989706737039, 0.260257380057078)), row.names = 1688614:1688619, class = "data.frame")

head(df)
的结果如下。

我的目标是按

T
(时间)属性(比如每 3 分钟)对时间序列进行分段,以计算每个块中
sp
ta
属性的均值、标准差。

我真的没有一个工作代码来实现这个,虽然我正在考虑循环从

head(df$T,1)
tail(df$T,1)
的序列,间隔 3 分钟并提取每个段中的记录以计算平均值,标准差对于某些列。但我想这不是解决 R 中这个问题的最佳方法。

任何帮助表示赞赏。使用 R 4.2.1.

r time-series posixct
1个回答
0
投票

你可以做

cut()
.

df |> 
  group_by(cut(T, breaks="3 min")) |> 
  summarise(across(c(sp,ta), list(mean=mean, sd=sd)))

顺便说一句,你的样本数据只包括09:30,所以让我用

flights
来展示一个例子。

library(nycflights13) # import library for flights dataset.

# Mutate datetime variable for calculating 3 minute interval.
flights <- flights |>
  mutate(datetime = as.POSIXct(
    paste0(substr(time_hour,1,14), 
           minute,
           substr(time_hour,17, 19))))

flights |> 
  group_by(cut(datetime, breaks="3 min")) |> 
  summarise(across(c(air_time, distance), list(mean = ~mean(., na.rm=T),
                                            sd = ~sd(., na.rm=T))))

输出

 cut(datetime, breaks = "3 min") air_time_mean air_time_sd distance_mean distance_sd
1             2013-01-01 05:15:00       227.000          NA      1400.000          NA
2             2013-01-01 05:27:00       227.000          NA      1416.000          NA
3             2013-01-01 05:39:00       160.000          NA      1089.000          NA
4             2013-01-01 05:45:00       183.000          NA      1576.000          NA
5             2013-01-01 05:57:00        97.000    74.95332       453.000    376.1808
6             2013-01-01 06:00:00       196.875   100.59548      1273.941    724.5070

数据不足以显示所有

mean
sd
虽然 3 分钟。

© www.soinside.com 2019 - 2024. All rights reserved.