Добавьте для каждого имени все пропущенные месяцы между 2000-2008 - PullRequest
0 голосов
/ 12 мая 2018

Пример:

data <- data.frame(Name = c(rep("A",25), rep("B",50)),
               Date = seq(as.Date("2018-01-01"), as.Date("2020-01-12"), by = 10),
               C1 = rep(c(100,NA,NA,NA,NA,500,320,102,412,NA,200,NA,145,800,230),5),
               C2 = rep(c(100,NA,NA,NA,NA,500,320,102,412,NA,200,NA,145,800,230),5)*2)

У меня есть другой набор данных. И в чем я могу быть уверен, так это в том, что мои наблюдения из моего другого набора данных имеют имя столбца и дату столбца в диапазоне 2000-2008.

Поэтому я ищу модифицированный код, который не только вычисляет медиану для каждого месяца, но и добавляет для каждого имени все пропущенные месяцы между 2000-2008 гг. И возвращает для них значение NA.

Спасибо за вашу помощь:)

1 Ответ

0 голосов
/ 12 мая 2018

Вы можете использовать tidyr::complete, чтобы обеспечить включение в ваши данные каждого месяца с 2000 - 2008.

Решение может быть следующим:

library(tidyverse)
library(lubridate)
df %>% mutate(Date = ymd(Date), C2 = C1*2) %>% 
  group_by(Name, YearMon = format(Date, "%Y-%m")) %>%
  summarise_at(vars(starts_with("C")), median, na.rm=TRUE) %>%
  complete(YearMon = 
         format(seq(ymd("2001-01-01"), ymd("2008-12-31"), by="1 month"),"%Y-%m")) %>% 
  as.data.frame()

#     Name YearMon  C1  C2
# 1      A 2001-01  NA  NA
# 2      A 2001-02  NA  NA
# 3      A 2001-03  NA  NA
# 4      A 2001-04  NA  NA
# 5      A 2001-05  NA  NA
# .............
# .............
# 180    B 2007-12  NA  NA
# 181    B 2008-01   4   8
# 182    B 2008-02  11  22
# 183    B 2008-03  13  26
# ............
# ..............
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...