Р: Как заполнить годовые данные внутри месячных данных? - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь загрузить данные из Quandl с помощью collapse = "monthly".Некоторые из значений доступны только в год или в два раза в год.Некоторые другие значения доступны только в течение определенных периодов времени.Это оставляет меня с большим количеством неоднородных данных.Как я могу заполнить годовые и половинные годовые данные по принципу «Последнее наблюдение перенесено», а остальные NA с 0?

Вот мое представление о данных, которые я получил, и о том,Я хочу иметь в конце:

library(tibble)

set.seed(4711)

# How do I get from:
#
df.start <- data_frame(
  Date = seq.Date(as.Date("1990-01-01"), as.Date("1999-12-01"), "1 month"),
  B = rep(NA, 120),
  C = c(rep(NA, 50), rnorm(120 - 50)),
  D = rep(c(rnorm(1), rep(NA, 11)), 10),
  E = c(rep(NA, 24), rep(c(rnorm(1), rep(NA, 11)), 8)),
  F = c(rep(NA, 45), rnorm(50), rep(NA, 25)),
  G = c(rep(NA, 24), rep(c(rnorm(1), rep(NA, 11)), 6), rep(NA, 24)),
  H = c(rep(NA, 10), rnorm(20), rep(NA, 16), rnorm(37), rep(NA, 37)),
  I = rep(c(rnorm(1), rep(NA, 5)), 20)
)
#
# To:
#
df.end <- data_frame(
  Date = seq.Date(as.Date("1990-01-01"), as.Date("1999-12-01"), "1 month"),
  B = rep(0, 120),
  C = c(rep(0, 50), rnorm(120 - 50)),
  D = rep(rnorm(10), each = 12),
  E = c(rep(0, 24), rep(rnorm(8), each = 12)),
  F = c(rep(0, 45), rnorm(50), rep(0, 25)),
  G = c(rep(0, 24), rep(rnorm(6), each = 12), rep(0, 24)),
  H = c(rep(0, 10), rnorm(20), rep(0, 16), rnorm(37), rep(0, 37)),
  I = rep(rnorm(20), each = 6)
)
#
# Automatically?
#

1 Ответ

0 голосов
/ 06 декабря 2018

Вы можете использовать fill, чтобы заполнить NAs последним непустым значением (кроме столбца Date), а затем replace оставшиеся NAs на 0. Мы делаем эти операции сгруппированнымипо годам.

library(tidyverse)
library(lubridate)

df.end <- df.start %>%
  mutate(year = year(Date)) %>%
  group_by(year) %>%
  fill(., colnames(df.start[-1])) %>%
  replace(., is.na(.), 0) %>%
  ungroup() %>%
  select(-year)
...