将每小时数据汇总为每日汇总
我有以下格式的每小时天气数据:
Date,DBT
01/01/2000 01:00,30
01/01/2000 02:00,31
01/01/2000 03:00,33
...
...
12/31/2000 23:00,25
我需要的是每天汇总最大、最小、平均值,如下所示:
Date,MaxDBT,MinDBT,AveDBT
01/01/2000,36,23,28
01/02/2000,34,22,29
01/03/2000,32,25,30
...
...
12/31/2000,35,9,20
如何在 R 中执行此操作?
I have an hourly weather data in the following format:
Date,DBT
01/01/2000 01:00,30
01/01/2000 02:00,31
01/01/2000 03:00,33
...
...
12/31/2000 23:00,25
What I need is a daily aggregate of max, min, ave like this:
Date,MaxDBT,MinDBT,AveDBT
01/01/2000,36,23,28
01/02/2000,34,22,29
01/03/2000,32,25,30
...
...
12/31/2000,35,9,20
How to do this in R?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
1)这可以使用zoo紧凑地完成:
这给出:
2)这是一个仅使用核心R的解决方案:
最后一行给出:
编辑:(1)因为这第一次出现了
text=
参数read.zoo
已添加到 Zoo 包中。(2) 小改进。
1) This can be done compactly using zoo:
This gives:
2) here is a solution that only uses core R:
The last line gives:
EDIT: (1) Since this first appeared the
text=
argument toread.zoo
was added in the zoo package.(2) minor improvements.
使用 plyr 包中的
strptime()
、trunc()
和ddply()
:给出
澄清:
strptime
根据格式将字符转换为日期。要了解如何指定格式,请参阅?strptime
。然后,trunc
会将这些日期时间截断为指定单位,在本例中为天。ddply
将在根据day
分割数据帧后评估数据帧中的函数summarize
。summarize
之后的所有内容都是传递给函数summarize
的参数。Using
strptime()
,trunc()
andddply()
from the plyr package :gives
To clarify :
strptime
converts the character to dates according to the format. To see how you can specify the format, see?strptime
.trunc
will then truncate these date-times to the specified unit, which is day in this case.ddply
will evaluate the functionsummarize
within the dataframe after splitting it up according today
. everything aftersummarize
are arguments that are passed to the functionsummarize
.还有一个不错的软件包,称为 HydroTSM。它使用
zoo
对象,并且可以及时转换为其他聚合。您的例子中的函数是
subdaily2daily
。您可以选择聚合是否应基于最小值/最大值/平均值...There is also a nice package called
hydroTSM
. It useszoo
objects and can convert to other aggregates in timeThe function in your case is
subdaily2daily
. You can choose if the aggregation should be based on min / max / mean...有几个选项:
1. Timetk
如果您有数据框(或 tibble),则可以使用
timetk
中的summarize_by_time()
函数:创建于 2021 年-05-21 由 reprex 包 (v2.0.0)
2. Tidyquant
您可以使用用于此目的的
tidyquant
包。该过程涉及使用 tq_transmute 函数返回使用 xts 聚合函数 apply.daily 修改的数据帧。我们将应用自定义stat_fun
,它返回最小值、最大值和平均值。但是,您可以应用任何您想要的矢量函数,例如分位数
。A couple of options:
1. Timetk
If you have a data frame (or tibble) then the
summarize_by_time()
function fromtimetk
can be used:Created on 2021-05-21 by the reprex package (v2.0.0)
2. Tidyquant
You can use the
tidyquant
package for this. The process is involves using thetq_transmute
function to return a data frame that is modified using the xts aggregation function,apply.daily
. We'll apply a customstat_fun
, which returns the min, max and mean. However, you can apply any vector function you'd like such asquantile
.鉴于您有 POSIXct 时间格式,您可以使用 as.POSIXct(time) 来完成此操作,您所需要的只是 cut 和aggregate()。
试试这个:
在这种情况下,温度是这样的
temp
ag 就像这个
ag
Given that you have POSIXct time format, you can do this using as.POSIXct(time), all you need is cut and aggregate().
try this:
In this case, temp is like this
temp
ag is like this
ag