Как назначить диапазон дат для каждой уникальной строки в кадре данных - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть таблица, которая дает мне показатель gpi для страны по годам.

СУЩЕСТВУЮЩИЕ ДАННЫЕ В КОНЕЧНОМ ДАННОМ КАМЕРЕ, Я ИМЕЮ:

gpi_year gpi_rank   gpi_country      gpi_score
2018        1       Iceland          1.096
2018        2       New Zealand      1.192
2018        3       Austria          1.274
.
.
.

2018        161     South Sudan      3.508
2018        162     Afghanistan      3.585
2018        163     Syria            3.6

Однако мне нужно добавить диапазон дат для каждой отдельной строки.

Пример: Я проверю, есть ли в строке 2018 , если да, тогда я дублирую запись для этой страны для каждой даты, начиная с 01-01-2018 до 31-12-2018 (потому что 2018). т.е. 365 дат для одной страны.

Аналогично, если в строке есть данные для 2017 для любой страны, то мне нужно дублировать запись для этой страны на каждую дату, начиная с 01-01-2017 по 31-12-2017 т.е. 365 дат для одной страны.

Пример: НУЖЕН ПОХОЖИЙ ВЫХОД:

gpi_year  gpi_rank  gpi_country  gpi_score  date
2018        1       Iceland      1.096      01-01-2018
2018        1       Iceland      1.096      02-01-2018
2018        1       Iceland      1.096      03-01-2018
.
.
.
.
2018        1       Iceland     1.096       29-12-2018
2018        1       Iceland     1.096       30-12-2018
2018        1       Iceland     1.096       31-12-2018
2018        2       New Zealand 1.096       01-01-2018
2018        2       New Zealand 1.096       02-01-2018
2018        2       New Zealand 1.096       03-01-2018
.
.
.
.
2018        2       New Zealand 1.096       29-12-2018
2018        2       New Zealand 1.096       30-12-2018
2018        2       New Zealand 1.096       31-12-2018

ПРИМЕЧАНИЕ: Мои данные имеют 163 стран. Каждая страна имеет баллы за 2017 и 2018 . Поэтому для каждой страны мне нужно назначить даты в диапазоне с 1 января 2017 года по 31 января 2017 года и с 1 января 2018 года по 31 января 2018 года.

1 Ответ

0 голосов
/ 03 ноября 2018

Использование data.table с искусственным фреймом данных:

library(data.table)

df <- data.frame("gpi_year" = 2018, "gpi_rank" = 1, "gpi_country" = "Iceland",
                 "gpi_score" = 1.096)

df <- setDT(df)[, .(gpi_rank = gpi_rank, gpi_country = gpi_country, gpi_score = gpi_score,
      date = seq(as.Date(paste0(gpi_year, "-01-01")),
                        as.Date(paste0(gpi_year, "-12-31")), by = "day"),
      gpi_year = gpi_year), by = 1:nrow(df)][, nrow := NULL]

Выход:

     gpi_rank gpi_country gpi_score       date gpi_year
  1:        1     Iceland     1.096 2018-01-01     2018
  2:        1     Iceland     1.096 2018-01-02     2018
  3:        1     Iceland     1.096 2018-01-03     2018
  4:        1     Iceland     1.096 2018-01-04     2018
  5:        1     Iceland     1.096 2018-01-05     2018
 ---                                                   
361:        1     Iceland     1.096 2018-12-27     2018
362:        1     Iceland     1.096 2018-12-28     2018
363:        1     Iceland     1.096 2018-12-29     2018
364:        1     Iceland     1.096 2018-12-30     2018
365:        1     Iceland     1.096 2018-12-31     2018
...