gpt4 book ai didi

r - 按 3 天对时间序列数据进行子集化并保存在列表中

转载 作者:行者123 更新时间:2023-12-05 00:46:54 24 4
gpt4 key购买 nike

将时间序列设置为 3 天并继续保存在列表中。假设第一个子集来自 day 1 to day 3那么第二个子集将来自 day 2 to day 4这样每个子集都有3天的数据。请注意,这是 10 分钟数据时间戳。并根据数据中可用的总天数保存列表中的每个子集。
我试过复制它。

 time_10 <- seq(ISOdatetime(2001,2,1,0,0,0), ISOdatetime(2001,3,31,0,0,0), by=(200))

a <- as.data.frame(matrix(, nrow = length(time_10), ncol = 4))
names(a)<- c("time_10","var1","var2","var3")
a$time_10 <- time_10
a$var1 <- runif(nrow(a), min=20, max=70)
a$var2 <- runif(nrow(a), min=10, max=50)
a$var3 <- runif(nrow(a), min= 3, max=10)
head(a)

enter image description here

这是我附加的图像,它将给出对时间序列数据进行子设置并将其保存在列表中的想法。这里分别是 D1:day1、D2:day2、D3:day3。使用 For 循环或任何其他最佳方法是值得赞赏的。注意:因此在 For 循环中,3 天的数据子设置将继续发生并保存在索引为 (Subset_n) 的列表中,其中 n 是子集数。

最佳答案

这似乎适用于您的情况。我所做的是提取日期并从头到尾滚动 3 天的窗口 (ww)。对于每一步,我根据窗口中的天数对 data.frame 进行子集化并将其存储到列表中。

time_10 <- seq(ISOdatetime(2001,2,1,0,0,0), ISOdatetime(2001,3,31,0,0,0), by=(200))
var1 <- runif(length(time_10), min=20, max=70)
var2 <- runif(length(time_10), min=50, max=90)
var3 <- runif(length(time_10), min=50, max=90)

a <- as.data.frame(matrix(, nrow = length(time_10), ncol = 4))
names(a)<- c("time_10","var1","var2","var3")
a$time_10 <- time_10
a$var1 <- var1
a$var2 <- var2
a$var3 <- var3

date <- strptime(a$time_10, format = "%Y-%m-%d")
td10 <- sort(unique(date))

ww <- 3
out <- vector("list", length(td10) - round(ww/2)) # preallocate a list

for (i in 1:length(td10)) {
bb <- i:(i + ww - 1) # this is the bounding box

if (max(bb) > length(td10)) {
message("End of time series reached, exiting.")
return(NULL)
}

out[[i]] <- a[date %in% td10[bb], ]
}

# check ranges of dates for each subset
lapply(out, FUN = function(x) range(x$time_10))

关于r - 按 3 天对时间序列数据进行子集化并保存在列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53129115/

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