Если вам действительно нужны месячные даты, вы можете использовать complete
для этого.
Я создал уникальный идентификатор для каждого года на основе Total
(возможно, вам придется поиграть с ним в зависимости откак ваши данные на самом деле организованы).Затем я превратил ваш столбец даты в дату, основанную на первом году.Затем я использовал complete
, чтобы заполнить остальные месяцы года.fill
использовался для заполнения строк, а mutate
для деления итогового числа на 12.
library(dplyr)
library(tidyr)
library(readr)
library(lubridate)
myData = read_delim("Date,b,c,d,Total\n2018,NA,NA,NA,12\n2018,0.5,0.5,NA,24\n2018,0.3,NA,0.5,36\n", delim=",")
myData
# # A tibble: 3 x 5
# Date b c d Total
# <int> <dbl> <dbl> <dbl> <int>
# 1 2018 NA NA NA 12
# 2 2018 0.500 0.500 NA 24
# 3 2018 0.300 NA 0.500 36
myData %>%
mutate(group_id = group_indices(., Total)) %>%
mutate(Date = dmy(paste("01/01/",Date))) %>%
group_by(group_id) %>%
complete(Date = seq.Date(Date[1],by = "month",length.out = 12)) %>%
fill(b,c,d,Total) %>%
mutate(Total = Total/12) %>%
ungroup() %>%
select(-group_id)
# # A tibble: 36 x 5
# Date b c d Total
# <date> <dbl> <dbl> <dbl> <dbl>
# 1 2018-01-01 NA NA NA 1.00
# 2 2018-02-01 NA NA NA 1.00
# 3 2018-03-01 NA NA NA 1.00
# 4 2018-04-01 NA NA NA 1.00
# 5 2018-05-01 NA NA NA 1.00
# 6 2018-06-01 NA NA NA 1.00
# 7 2018-07-01 NA NA NA 1.00
# 8 2018-08-01 NA NA NA 1.00
# 9 2018-09-01 NA NA NA 1.00
# 10 2018-10-01 NA NA NA 1.00
# # ... with 26 more rows