gpt4 book ai didi

r - 按不在系列中的时间对动物园系列进行子集

转载 作者:行者123 更新时间:2023-12-05 01:05:56 26 4
gpt4 key购买 nike

R 中是否有一个很好的包,它允许按不在时间序列中的时间对时间序列进行子集(即索引到)?
例如。对于金融应用程序,通过不在数据库中的时间戳索引价格序列,应返回时间戳之前的最新可用价格。

在代码中,这就是我想要的

n =15
full.dates = seq(Sys.Date(), by = 'day', length = n)
series.dates = full.dates[c(1:10, 12, 15)]
require(zoo)
series=zoo(rep(1,length(series.dates)), series.dates)
series[full.dates[11]]

这返回
Data:
numeric(0)

Index:
character(0)

但是,我希望它返回 full.dates[11] 之前的最后一个现有日期的值,即 full.dates[10]:
series[full.dates[10]]
2014-01-03
1

谢谢

最佳答案

您可以使用 index在您的 zoo 中提取观察的索引目的。然后可以使用索引来设置对象的子集。一步一步来展示逻辑(你只需要最后一步,如果我理解正确的话):

# the index of the observations, here dates
index(series)

# are the dates smaller than your reference date?
index(series) < full.dates[11]

# subset observations: dates less than reference date
series[index(series) < full.dates[11]]

# select last observation before reference date:
tail(series[index(series) < full.dates[11]], 1)

# 2014-01-03
# 1

一种可能的替代方法是使用 na.locf 扩展您的时间序列并“用最新的非 NA 替换 [e] 每个 NA”。和 xout参数(另见 ?na.locf?approxthis answer)
# expand time series to the range of dates in 'full.dates'
series2 <- na.locf(series, xout = full.dates)
series2

# select observation at reference date
series2[full.dates[10]]
# 2014-01-03
# 1

如果您希望将不完整系列中的缺失值替换为“向后进行的下一个观察”,您需要 merge您的系列带有包含所需连续日期范围的“虚拟”动物园对象。
series3 <- merge(series, zoo(, full.dates))
na.locf(series3, fromLast = TRUE)

关于r - 按不在系列中的时间对动物园系列进行子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20771649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com