#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. Кроме того, я надеялся, что мне не придется разрезать данные, чтобы получить их