【问题标题】:How to convert Hourly data to daily average for two variables?如何将每小时数据转换为两个变量的每日平均值?
【发布时间】:2022-06-13 06:00:22
【问题描述】:

我正在研究 3 年的每日平均 PM 10 数据。我已经处理过我的空气质量数据,但是我的温度和风速数据是每小时的。如何计算每日平均值并将这两个数据结合起来?

例如:

date temperature Wind_Speed
1/01/2018 1:00 18.8 1.9
1/01/2018 2:00 18.7 1.5
1/01/2018 3:00 18.6 1.6
1/01/2018 4:00 18.5 1.0
1/01/2018 5:00 18.1 1.2

...一直到 1/1/2021 00:00 (26304 obs)。

我试过了

StartDateTime = dmy_hm("-01-01-2018 01:00")
EndDateTime <- dmy_hm("01-01-2021 00:00")
DF <- data.frame(DateTime = c(seq.POSIXt(StartDateTime, EndDateTime, by = "hour"),
                              seq.POSIXt(StartDateTime, EndDateTime, by = "hour")),
                 check.rows = TRUE, fix.empty.names = TRUE, 
              )
head(DF)
  • 它将 DF 更改为一个变量和 52608 个 obs。在这个阶段我非常迷茫。

我的 pm10 数据有一个时间序列 [1:1096]- 原子向量。关于如何将每小时数据更改为温度和风速的日平均值以便我可以将其与 pm10 数据结合起来,有什么建议吗?

数据:dput(head(sample_data_1))

【问题讨论】:

  • 您能否以您拥有的形式包含原始数据的样本?例如dput(head(YOUR_DATA)) 将制作一个代码配方,您可以将其放入您的问题中,以便我们可以按照您的方式加载它。
  • 抽象地说,我会添加一个变量来记录日期(而不是你的日期时间),然后使用dplyr 代码,如df %&gt;% group_by(date) %&gt;% summarize(across(2:3, mean))。这将给出位置 2 和 3 中每个变量的每日平均值。
  • 您好,我尝试添加数据,这里似乎无法添加数据

标签: r vector air average


【解决方案1】:

我假设您的数据看起来像 DF2(而您使用 lubridate

library(tidyverse)
library(lubridate)
StartDateTime <- dmy_hm("-01-01-2018 01:00")
EndDateTime <- dmy_hm("01-01-2021 00:00")
date_hour_seq <- seq.POSIXt(StartDateTime, EndDateTime, by = "hour")
DF2 <- data.frame(DateTime = date_hour_seq,
                  temperatur = rnorm(length(date_hour_seq), 10),
                  wind = rnorm(length(date_hour_seq), 1, .1))

然后您可以在group_by 中创建一个新的date 变量和 使用summarise计算平均值:

DF2 %>% group_by(date = date(DateTime)) %>%
  summarise(temperatur = mean(temperatur), 
            wind = mean(wind))
#> # A tibble: 1,097 × 3
#>    date       temperatur  wind
#>    <date>          <dbl> <dbl>
#>  1 2018-01-01       9.98 1.03 
#>  2 2018-01-02       9.85 1.00 
#>  3 2018-01-03       9.88 1.02 
#>  4 2018-01-04      10.3  1.02 
#>  5 2018-01-05       9.83 0.979
#>  6 2018-01-06      10.1  1.00 
#>  7 2018-01-07       9.74 0.984
#>  8 2018-01-08       9.96 0.997
#>  9 2018-01-09      10.3  1.01 
#> 10 2018-01-10      10.1  0.987
#> # … with 1,087 more rows

reprex package (v2.0.1) 于 2022-06-10 创建

【讨论】:

  • 那行得通。我可以看到平均值但是我不能将 DF2 更改为新表?是否可以仅创建平均值的新数据?
  • DF3 &lt;- DF2 %&gt;% group_by(date = date(DateTime)) %&gt;% summarise(temperatur = mean(temperatur), wind = mean(wind))
猜你喜欢
  • 2017-02-22
  • 2018-02-15
  • 2018-01-24
  • 2022-06-30
  • 1970-01-01
  • 2012-08-07
  • 2019-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多