Как получить среднее значение по неделям и городу в R - PullRequest
0 голосов
/ 06 мая 2020

У меня есть такой date.frame:

#         city          date       pm2.5      
#1       beijing       2018-1-1      12.5  
#2       beijing       2018-1-2       14 
#3       beijing       2018-1-3       15  
          ...           ...           ...
#365     beijing       2018-12-31     50
#366     shanghai      2018-1-1       14
#367     shanghai      2018-1-2       15
          ...             ...         ...
#730     shanghai      2018-12-31     60

Как рассчитать среднее значение переменной pm2.5 по weeks и city. будет выглядеть так:

Желаемый результат:

#         city          weeks       pm2.5      
#1       beijing          1        13  
#2       beijing          2        14 
#3       beijing          3        15  
          ...           ...           ...
#42     beijing          42       50
#43     shanghai          1       14
#44     shanghai          2       15
          ...           ...         ...
#84     shanghai          42       55

Я пробовал использовать «apply.weekly», но ничего не вышло.

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 06 мая 2020

Используя aggregate. Используйте transform ed данные, где вы format ваши даты до %W eek чисел. Пример:

res <- aggregate(value ~ week + city, data=transform(dat, week=format(date, "%W")), mean)
res[1:5, ]
#    week city    value
# 1   00    A 6.500000
# 2   01    A 6.857143
# 3   02    A 4.857143
# 4   03    A 5.857143
# 5   04    A 5.714286

res[52:57, ]
#    week city    value
# 52   51    A 5.714286
# 53   52    A 3.500000
# 54   00    B 6.500000
# 55   01    B 5.000000
# 56   02    B 3.285714
# 57   03    B 5.428571

Примечание , что вам нужна переменная даты, отформатированная как "date", т.е. когда она у вас есть в формате "character", вам необходимо сделать заранее dat$date <- as.Date(dat$date).


Данные игрушки

dat <- expand.grid(city=LETTERS[1:3],
            date=seq.Date(as.Date("2019-01-01"), as.Date("2019-12-31"), "day"))
set.seed(42)
dat$value <- sample(1:10, nrow(dat), replace=T)
0 голосов
/ 06 мая 2020

Попробуйте следующее:

Сначала преобразуйте дату в неделю, затем вычислите среднее значение для города и недели, используя group_by.

Для этого вам понадобится dplyr.

library(dplyr)

data.frame_result = data.frame1 %>%
  mutate(weeks = format(as.Date(date, "%Y-%m-%d"), "%V")) %>%
  group_by(city, weeks) %>%
  summarize(avgPM25 = mean(as.numeric(pm2.5))) %>%
  ungroup()
...