R语言如何将日期数据整理为按周分组统计

以R中自带的ChicagoNMMAPS数据集为例(该数据集包含1987-2000年芝加哥每日的死亡率、天气(温度、露点温度、相对湿度)和污染(PM10和臭氧)等情况),如何将这种按照每日统计的时间序列数据,整理成为按照每周统计的时间序列数据。其中温度等变量取平均值,死亡率取总和。

可以利用tidyverse中的dplyr和tidyr包进行数据整理。具体步骤如下:

  1. 加载数据集ChicagoNMMAPS。
    library(tidyverse)
    data(ChicagoNMMAPS)
    
  2. 将日期变量转换为日期格式。
    ChicagoNMMAPS <- ChicagoNMMAPS %>% 
    mutate(Date = as.Date(Date, "%m/%d/%Y")) %>%
    arrange(Date)
    
  3. 将每日数据按照每周进行汇总。首先根据日期变量生成新的周次变量,然后根据周次进行数据汇总。
    ChicagoNMMAPS_weekly <- ChicagoNMMAPS %>%
    mutate(Week = format(Date, "%Y-%U")) %>% 
    group_by(Week) %>%
    summarise(Temp_mean = mean(Temp),
             DewPoint_mean = mean(DewPoint),
             Humidity_mean = mean(Humidity),
             PM10_mean = mean(PM10),
             Ozone_mean = mean(Ozone),
             Deaths_sum = sum(Deaths))
    
  4. 最后得到按照每周统计的时间序列数据集ChicagoNMMAPS_weekly。

以R中自带的ChicagoNMMAPS数据集为例(该数据集包含1987-2000年芝加哥每日的死亡率、天气(温度、露点温度、相对湿度)和污染(PM10和臭氧)等情况),如何将这种按照每日统计的时间序列数据,整理成为按照每周统计的时间序列数据。其中温度等变量取平均值,死亡率取总和。

首先,您需要将每天的数据按照每周进行分组并计算相应的聚合值。R语言中,可以使用dplyr包来完成此任务。

下面是一个示例代码,将ChicagoNMMAPS数据集转换为按周聚合的数据:

library(dplyr)
library(lubridate) # 用于处理日期时间数据

# 读入数据集
data(ChicagoNMMAPS)

# 将日期转换为星期几
ChicagoNMMAPS <- ChicagoNMMAPS %>%
  mutate(weekday = wday(Date, label = TRUE, week_start = 1))

# 按星期几和年份进行分组,并计算相应的聚合值
ChicagoNMMAPS_weekly <- ChicagoNMMAPS %>%
  group_by(weekday, year(Date)) %>%
  summarise(Temperature = mean(Temperature, na.rm = TRUE),
            DewPointTemperature = mean(DewPointTemperature, na.rm = TRUE),
            RelativeHumidity = mean(RelativeHumidity, na.rm = TRUE),
            PM10 = mean(PM10, na.rm = TRUE),
            Ozone = mean(Ozone, na.rm = TRUE),
            Deaths = sum(Deaths, na.rm = TRUE)) %>%
  ungroup()

# 将年份和星期几组合成日期格式
ChicagoNMMAPS_weekly$Date <- ymd(paste0(ChicagoNMMAPS_weekly$year, "-", 
                                        month(ChicagoNMMAPS_weekly$weekday, label = TRUE, abbr = FALSE), "-01")) +
  weeks(week(ChicagoNMMAPS_weekly$Date) - 1)

# 选择需要的列并按日期排序
ChicagoNMMAPS_weekly <- ChicagoNMMAPS_weekly %>%
  select(Date, Temperature, DewPointTemperature, RelativeHumidity, PM10, Ozone, Deaths) %>%
  arrange(Date)

在上述代码中,我们首先将日期转换为星期几,然后按星期几和年份进行分组,并计算每周的平均温度、露点温度、相对湿度、PM10和臭氧值的平均值以及死亡率的总和。接着,我们将年份和星期几组合成日期格式,并按日期排序,最终得到了按周聚合的数据集。

要将按日统计的时间序列数据整理为按周统计的时间序列数据,你可以使用R中的dplyr和lubridate库来进行操作。以下是一个示例代码,演示如何完成这个任务:

library(dplyr)
library(lubridate)

# 读取数据集
data <- read.csv("ChicagoNMMAPS.csv")

# 将日期列转换为日期格式
data$Date <- as.Date(data$Date)

# 添加一列表示所属周的标签
data <- data %>%
  mutate(Week = floor_date(Date, "week"))

# 按周统计数据
weekly_data <- data %>%
  group_by(Week) %>%
  summarise(Temperature = mean(Temperature),
            DewPointTemperature = mean(DewPointTemperature),
            RelativeHumidity = mean(RelativeHumidity),
            PM10 = mean(PM10),
            Ozone = mean(Ozone),
            Deaths = sum(Deaths))

# 打印按周统计的时间序列数据
print(weekly_data)


在上述代码中,首先加载了dplyr和lubridate库。然后,使用read.csv函数读取ChicagoNMMAPS数据集(假设数据集文件名为"ChicagoNMMAPS.csv")。接下来,将日期列转换为日期格式,以便进行日期计算。

通过使用mutate函数和floor_date函数,添加了一个名为"Week"的新列,表示每条记录所属的周。

最后,使用group_by函数按周对数据进行分组,然后使用summarise函数计算每周的平均温度、露点温度、相对湿度、PM10和臭氧的平均值,以及死亡人数的总和。生成的按周统计的时间序列数据保存在weekly_data数据框中。

你可以根据实际需求修改变量名、数据集的文件名和路径,以及按周统计的方式(例如,计算平均值、中位数等)。生成的按周统计的时间序列数据将被打印出来,你可以根据需要进行进一步的处理或保存到文件中。

该回答引用ChatGPT
首先,需要将日期数据转换为日期格式,并进行按照日期排序。可以使用 lubridate 包来实现日期格式转换,使用 dplyr 包的 arrange 函数来排序。代码如下:


library(lubridate)
library(dplyr)

data(ChicagoNMMAPS)

ChicagoNMMAPS <- ChicagoNMMAPS %>%
mutate(Date = mdy(Date)) %>% #将日期数据转换为日期格式
arrange(Date) #按照日期排序


接着,使用 lubridate 包的 floor_date 函数将日期按照周进行舍去。代码如下:


ChicagoNMMAPS <- ChicagoNMMAPS %>%
mutate(Week = floor_date(Date, unit = "week")) #将日期进行按周舍去


然后,使用 dplyr 包的 group_by 函数将数据按照每周进行分组,并使用 summarize 函数统计每周的变量平均值(温度变量)和总和(死亡率变量)。代码如下:


Chicago_weekly <- ChicagoNMMAPS %>%
group_by(Week) %>%
summarize(Temperature = mean(Temperature),
DewPointTemperature = mean(DewPointTemperature),
RelativeHumidity = mean(RelativeHumidity),
PM10 = mean(PM10),
Ozone = mean(Ozone),
Deaths = sum(Deaths))


最终得到按照每周统计的时间序列数据,保存在变量 Chicago_weekly 中。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先,我们需要载入ChicagoNMMAPS数据集:

library(NMMAPS)
data(ChicagoNMMAPS)

日期数据已经预处理成为Date格式,因此我们可以运用POSIXlt和strftime函数:

# 将Date类型数据转换成POSIXlt类型
date <- as.POSIXlt(ChicagoNMMAPS$date)
# 提取日期中的年份和周数
year_week <- strftime(date, format = "%Y-%U")

# 将数据框和year_week合并,并按照year_week排序
data <- cbind(ChicagoNMMAPS, year_week)
data <- data[order(data$year_week), ]

接下来,我们需要将死亡人数取总和,将其他变量取平均值,并按照每周分组统计:

library(dplyr)

# 按照每周分组,并进行汇总操作
data_weekly <- data %>%
  group_by(year_week) %>%
  summarize(sum_deaths = sum(deaths),
            mean_temp = mean(temp),
            mean_dewp = mean(dewp),
            mean_humi = mean(humi),
            mean_pm10 = mean(pm10),
            mean_ozone = mean(ozone))

最后,我们可以查看整理完的数据集:

View(data_weekly)

该数据集的每行表示一个周的统计数据,其中sum_deaths列为该周内死亡人数的总和,mean_temp列为该周内温度的平均值,mean_dewp列为该周内露点温度的平均值,mean_humi列为该周内相对湿度的平均值,mean_pm10列为该周内PM10的平均值,mean_ozone列为该周内臭氧的平均值。
如果我的回答解决了您的问题,请采纳!