从每日数据中获取每周平均值&合并他们

时间:2017-11-19 16:29:00

标签: r dataframe time-series

我有两个数据集。第一个是显示一周内登革热病例的数量。这是数据集的第一行:

season season_week week_start_date denv1_cases denv2_cases denv3_cases denv4_cases
1 1990/1991           1      1990-04-30           0           0           0           0
2 1990/1991           2      1990-05-07           0           0           0           0
3 1990/1991           3      1990-05-14           0           0           0           0
4 1990/1991           4      1990-05-21           0           0           0           0
5 1990/1991           5      1990-05-28           0           0           0           0
6 1990/1991           6      1990-06-04           1           0           0           0
  other_positive_cases additional_cases total_cases
1                    4                0           4
2                    5                0           5
3                    4                0           4
4                    3                0           3
5                    6                0           6
6                    1                0           2

第二列显示登革热季节的周数,第三列显示该周的开始日期。我有另一个包含天气数据的数据集。以下是数据集的第一行:

 TMAX TMIN TAVG TDTR PRCP       date
1 26.7 20.6 23.7  6.1  1.3 1956-01-01
2 25.6 21.1 23.4  4.5 20.8 1956-01-02
3 26.7 21.7 24.2  5.0  1.8 1956-01-03
4 26.7 19.4 23.0  7.3  0.0 1956-01-04
5 27.8 17.2 22.5 10.6  0.0 1956-01-05
6 26.1 21.1 23.6  5.0  0.3 1956-01-06

我想将此数据集从每日视图转换为每周视图,并平均所有行,并与登革热案例数据集合并。但我找不到将每日数据转换为每周数据的方法。怎么解决这个?

1 个答案:

答案 0 :(得分:1)

我假设您的第一个数据集中的每周开始日期是星期日。根据这一假设,我们可以使用包floor_date

中的lubridate
require(lubridate)
require(dplyr)

df2 <- df2 %>%
    mutate(date = floor_date(ymd(date), unit = "weeks")) %>%
    group_by(date) %>%
    summarise_all(.funs = mean)

确保所有列(日期除外)都是数字。

然后你可以自由地加入到df1:

df3 <- d1 %>%
    left_join(df2, by = c("week_start_date" = "date"))

希望这有帮助!