我的数据框给出了
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.
你可以做
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 分钟。