我有一个很大的年度数据集,其中每个小时都包含一个值。我感兴趣的是每天的值或几天的值。在我的脚本中,我指定了感兴趣的开始和结束日期,并在一个单独的R脚本("run_seq. R")中根据每个小时的值聚合数据。
Date_From <- '2022-04-01'
Date_To <- '2022-04-02'
DF_hour<-(DfDHW %>%filter(as.Date(Hour) >= as.Date(Date_From) & as.Date(Hour) <= as.Date(Date_To)))
dummy<-as.numeric(DF_hour$Var*0+1)
dfdate <- aggregate(.~dummy, DFhour, sum)
这就像预期的那样工作。但是,我想在循环中对月份的几天重复这个操作。我所做的是创建一个"dates from"和"dates to"的序列以及一个数字序列号:
dates_from <- seq(as.Date("2022-04-01"), as.Date("2022-04-10"), by=1)
dates_to <- seq(as.Date("2022-04-02"), as.Date("2022-04-11"), by=1)
seq_num<-as.numeric(format(dates_from, format = "%d"))
df<-cbind.data.frame(dates_from, dates_to, seq_num)
| 日期_从|日期_至|序号|
| - ------| - ------| - ------|
| 2022年4月1日|2022年4月2日|1个|
| 二○二二年四月二日|2022年4月3日|第二章|
但是,如果运行for()循环,代码将选择所有的开始和结束日期,并聚合所有10天的数据。
for (x in seq_num) {
source("run_seq.R")
}
相反,我希望选择与每个序号(1,2,3 ...)对应的开始和结束日期,以便在第一个循环中选择序号1的开始/结束,在第二个循环中选择序号2的开始/结束,依此类推。
示例:循环1 =序号1:起始日期= 2022年4月2日;日期至= 2022年4月3日;循环2 =序列号2:起始日期= 2022年4月3日;日期至= 2022年4月4日;
DfDHW数据如下所示(总共37个变量,8760行):
| 小时|变量1|变量2|
| - ------| - ------| - ------|
| 2022年1月1日01时00分|一点四八零|一点四八零|
| 2022年1月1日02时00分|零点九五七|零点九五七|
dput(水头(DfDHW)产量:
structure(list(Hour = structure(c(1640995200, 1640998800, 1641002400,
1641006000, 1641009600, 1641013200), class = c("POSIXct", "POSIXt"
), tzone = "Europe/Stockholm"), Var1 = c(1.48022736417965,
0.957129616195086, 0.67616277119973, 0.516807667014335, 0.500124643187317,
0.596748739907164), Var2 = c(1.48022736417965, 0.957129616195086,
0.67616277119973, 0.516807667014335, 0.500124643187317, 0.596748739907164
), Var3 = c(1.48022736417965, 0.957129616195086, ...
我该怎么做呢?或者有没有更优雅的方法?
2条答案
按热度按时间5ssjco0h1#
一种数据过滤方法
分别获取从“2022年1月1日”到“2022年1月2日”、“2022年1月2日”到“2022年1月3日”以及“2022年1月3日”到“2022年1月4日”的天数的
sum
。数据
z9smfwbn2#
我遵循Andre维尔德贝格的建议,在循环之前进行聚合。由于日期格式的原因,建议的过滤对我不起作用。相反:
这将所有小时值汇总为日值(sum),然后设置日期:
并在while循环中运行后台代码,另外为每个循环保存一个绘图。
这似乎是可行的。也许for()循环会更快,但这样我就可以选择任何日期。