Как вычислить среднее значение для таблицы данных в R на основе нескольких условий

#r #data.table #data-manipulation

#r #data.table #манипулирование данными

Вопрос:

У меня есть следующие данные :

 library(lubridate)
library(dplyr)
library(data.table)
MWE <- data.table(
  Date=rep(seq(ymd("2020-1-1"), ymd("2020-3-30"), by = "days"),each=6),
  Country=rep(c("France","United States","Germany"),90*6),
  TransportType=rep(c("Train","Cars"),each=3,90*3),
  Value=rnorm(90*6,2,3)
  )
  

Я хочу создать новую переменную, которая является средним значением :

  • По странам и транспорту
  • По дням недели
  • на основе дат до марта (но и здесь для марта тоже)

Таким образом, среднее значение должно быть рассчитано за январь и февраль, но в базе данных за весь период.

Мне удалось выполнить первые два (или я так думаю, я проверяю) :

 MWE_2 <- MWE %>%
  .[,JourSem:=weekdays(Date)] %>%
  .[,Moyenne:=mean(Value),by=.(Country,JourSem,TransportType)]
  

Но я не уверен, как передать другое условие в этом. Я думаю, что я понял это так

 MWE_3 <- MWE %>%
  .[,JourSem:=weekdays(Date)] %>%
  .[Date <= "2020-02-29",Moyenne:=mean(Value),by=.(Country,JourSem,TransportType)]
  

Но мне не хватает значения для мартовских дат, что логично, поскольку они отфильтровываются, что, следовательно, не то, что я хочу.

Ответ №1:

Мы можем сначала вычислить среднее значение за январь и февраль месяц для каждого дня недели, а затем объединить эти данные с данными за март.

 library(data.table)

MWE[, JourSem:=weekdays(Date)]

d1 <- MWE[Date <= as.Date("2020-02-29")] %>%
        .[, .(Moyenne = mean(Value)), JourSem]

MWE[Date > as.Date("2020-02-29")][d1, on = 'JourSem']
  

Комментарии:

1. Мне было неясно. Я хочу, чтобы среднее значение охватывало другие данные за март, но рассчитывалось только за январь и февраль

2. Я не совсем понимаю, какое значение вы хотите показать в марте? Вы имеете в виду, что данные за март будут иметь средние значения для всех данных (январь и февраль вместе взятые)? Значит, весь март будет иметь одинаковое значение?

3. Я хочу, например, для данных за среду марта в Германии о поездах, иметь среднее значение сред в Германии о поездах, рассчитанное за январь и февраль (которое тогда по конструкции было бы таким же, как и для каждой среды в Германии для поездов за весь период)

4. Можете ли вы проверить, ближе ли обновленный ответ к тому, что вы хотите? d1 это данные со средним значением для каждого дня недели в январе и феврале.

5. Кроме того, я надеялся, что мне не придется разрезать данные, чтобы получить их