我正在尝试为不规则的时间序列数据集提取有趣的统计数据,但很难找到适合该工作的正确工具.可以很容易地找到用于操作定期采样时间序列或基于索引的系列的工具,尽管我对我正在尝试解决的问题没有太多运气.
首先,可重现的数据集:
library(zoo)
set.seed(0)
nSamples <- 5000
vecDT <- rexp(nSamples, 3)
vecTimes <- cumsum(c(0,vecDT))
vecDrift <- c(0, rnorm(nSamples, mean = 1/nSamples, sd = 0.01))
vecVals <- cumsum(vecDrift)
vecZ <- zoo(vecVals, order.by = vecTimes)
rm(vecDT, vecDrift)
Run Code Online (Sandbox Code Playgroud)
假设时间以秒为单位.系列中有将近1700秒(仅为30分钟),在此vecZ期间有5001个参赛作品.(注意:我尝试使用xts,但xts似乎需要日期信息,而且当不相关时我宁愿不使用特定的日期.)
我的目标如下:
确定每个点前3分钟和3分钟后的值的索引.由于时间是连续的,我怀疑任何两点相距3分钟.我想要找到的是在给定点之前至少3分钟,至少3分钟之后的点,即类似下面的点(伪代码):
backIX(t, vecZ, tDelta) = min{ix in length(vecZ) : t - time(ix) < tDelta}
forwardIX(t, vecZ, tDelta) = min{ix in length(vecZ) : time(ix) - t > tDelta}
所以,3分钟,tDelta = 180.如果t=2500,则结果为forwardIX()3012(即时间(vecZ)[2500]为860.1462,时间(vecZ)[3012]为1040.403,或仅超过180秒),输出为backwardIX() …
我很好奇是否有人可以提出一种(更快)的方法来计算可变时间间隔(窗口)的滚动统计(滚动均值,中位数,百分位数等).
也就是说,假设有一个随机定时观察(即不是每日,或每周数据,观察只有时间戳,如在滴答数据中),并且假设您想查看中心和离散统计数据,您可以扩大并收紧计算这些统计数据的时间间隔.
我做了一个简单的for循环来做到这一点.但它显然运行得非常慢(实际上我认为我的循环仍在运行在我设置的一小部分数据样本上以测试其速度).我一直试图让ddply这样做 - 这对于每日统计数据来说似乎是不可能的 - 但我似乎无法摆脱它.
例:
样品设置:
df <- data.frame(Date = runif(1000,0,30))
df$Price <- I((df$Date)^0.5 * (rnorm(1000,30,4)))
df$Date <- as.Date(df$Date, origin = "1970-01-01")
Run Code Online (Sandbox Code Playgroud)
示例函数(运行非常慢,有很多观察结果
SummaryStats <- function(dataframe, interval){
# Returns daily simple summary stats,
# at varying intervals
# dataframe is the data frame in question, with Date and Price obs
# interval is the width of time to be treated as a day
firstDay <- min(dataframe$Date)
lastDay <- max(dataframe$Date)
result <- data.frame(Date = NULL,
Average = NULL, …Run Code Online (Sandbox Code Playgroud) 我有以下 data.frame:
grp nr yr
1: A 1.0 2009
2: A 2.0 2009
3: A 1.5 2009
4: A 1.0 2010
5: B 3.0 2009
6: B 2.0 2010
7: B NA 2011
8: C 3.0 2014
9: C 3.0 2019
10: C 3.0 2020
11: C 4.0 2021
Run Code Online (Sandbox Code Playgroud)
期望的输出:
grp nr yr nr_roll_period_3
1 A 1.0 2009 NA
2 A 2.0 2009 NA
3 A 1.5 2009 NA
4 A 1.0 2010 NA
5 B 3.0 2009 NA
6 …Run Code Online (Sandbox Code Playgroud)