Разделить строку с годовым значением на строки с месячными значениями - PullRequest
0 голосов
/ 01 июня 2018

У меня есть таблица с годовым совокупным значением.Я хочу разделить их на месячные значения, разделив число «Итого» на 12.

library(readr)
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.5   0.5  NA      24
3  2018   0.3  NA     0.5    36

желаемый результат (для первой строки я ожидаю всего 36 строк):

   Date       b     c     d     Total
 1 2018-01-01 NA    NA    NA        1
 2 2018-02-01 NA    NA    NA        1
 3 2018-03-01 NA    NA    NA        1
 4 2018-04-01 NA    NA    NA        1
 5 2018-05-01 NA    NA    NA        1
 6 2018-06-01 NA    NA    NA        1
 7 2018-07-01 NA    NA    NA        1
 8 2018-08-01 NA    NA    NA        1
 9 2018-09-01 NA    NA    NA        1
10 2018-10-01 NA    NA    NA        1
11 2018-11-01 NA    NA    NA        1
12 2018-12-01 NA    NA    NA        1

Я уже проверил принятый ответ здесь: Разбить итоговую строку на отдельные строки в R , но, к сожалению, это не работает для меня.

1 Ответ

0 голосов
/ 01 июня 2018

Если вам действительно нужны месячные даты, вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...