gpt4 book ai didi

r - 在 R 中创建日期时间开始/结束的数组

转载 作者:行者123 更新时间:2023-12-01 12:58:14 28 4
gpt4 key购买 nike

我正在使用 R 使用 zoo 和 chron 进行一些时间序列分析。我有一个包含大量数据的动物园对象,需要能够使用 window 函数将数据子集化为仅一天的值(value),然后是下几天的值(value),然后是下一个等等

我试图找到最简单的方法来创建一个数组,其中包含特定时期内每一天的日期,并提出了以下方法:

orig = c(month=1, day=1, year=2005)
dates <- chron(1:1825, origin=orig, out.format=c(dates="d/m/y", times="h:m"))

这使用儒略日表示法,有 1825 天(365*5 - 五年),从我的日期周期的第一天开始。然后我尝试使用这个数组的每个元素做一个 for 循环:

for (date in dates)
{
s = chron(date, "00:00:00", origin=orig)
e = chron(date, "23:59:59", origin=orig)

aeronet_day = window(aeronet, start=s, end=e)
}

但是,这给了我一个警告,说我对 aeronet 动物园对象以及 se 变量使用了不同的来源, 它不选择任何数据。

有更好的方法吗?或者解决这个问题的方法?基本上我想要的是运行一个 for 循环,在循环中我可以使用 aeronet_day = window(aeronet, start=s, end=e) 代码来生成一个包含数据的动物园对象一天(例如 2005 年 5 月 1 日从 00:00:00 到 23:59:59。

最佳答案

假设我们有这样的数据:

# create test data
library(zoo)
library(chron)
z <- zooreg(1:30, start = chron("2000-01-01"), freq = 2)

1) 汇总R aggregate 函数有一个 zoo 方法。第二个参数是我们聚合的依据。如果它是一个函数,它将应用于动物园对象的索引。例如这里我们计算每个日期的平均值:

z.ag <- aggregate(z, as.Date, mean)

如果愿意,我们可以用更复杂的函数替换 mean

2) split 。 R split 函数有一个 zoo 方法。如果我们真的想按日期拆分 z 那么我们可以这样做。这里的 z.split.list 是一个列表,其每个组件都包含一个日期的动物园对象。

z.split.list <- split(z, as.Date(time(z)))

现在 (a) sapply 或 (b) lapply 在该列表上或 (c) 使用以下内容(替换 print(zc)进行任何需要的处理)。这里 zc 是列表的一个组成部分,即它是仅取特定日期形成的动物园对象:

for(zc in z.split.list) print(zc)

请注意,as.Date(time(z)) 是一个向量,其日期对应于 z 的元素。

编辑:

各种小的阐述。

关于r - 在 R 中创建日期时间开始/结束的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8403225/

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