заполнить пропущенные значения с непрерывной записью в R? - PullRequest
1 голос
/ 18 июня 2020

Я пытаюсь вести непрерывную запись с NA за любой недостающий день. В моем коде ниже я создал несколько Date с Fake Data. Я намеренно удалил несколько дней, чтобы отразить мой случай. Я хочу непрерывную запись и использую NA для Day / Date, где у меня нет значения. Например, myData в моем коде должно иметь 3rd day каждого месяца со значением NA. Это всего лишь пример, у меня много dates/days отсутствует в моих фактических данных, но я хочу иметь непрерывный date со значением, установленным как NA для тех, которые отсутствуют dates

library(lubridate)
library(tidyverse)

set.seed(1500)

DF <-  data.frame(Date = seq(as.Date("2000-01-01"), to = as.Date("2010-12-31"), by = "days"), FakeData = runif(4018, 0,50))


myData <- DF %>% 
  mutate(Year = year(Date), Month = month(Date), Day = day(Date)) %>% 
  filter(!Day == 03)

Ответы [ 2 ]

2 голосов
/ 18 июня 2020

Вы можете merge myData с DF, чтобы получить все дни с добавлением NA

merge(DF[-2], myData, all.x = TRUE)

#       Date FakeData Year Month Day
#1 2000-01-01 31.19773 2000     1   1
#2 2000-01-02 48.61096 2000     1   2
#3 2000-01-03       NA   NA    NA  NA
#4 2000-01-04 17.11499 2000     1   4
#5 2000-01-05 15.52981 2000     1   5
#6 2000-01-06 12.92870 2000     1   6
#....

Если у вас нет доступа к DF, вы можете создать его по:

DF <- data.frame(Date = seq(min(myData$Date), max(myData$Date), by = 'day'))
2 голосов
/ 18 июня 2020

Для этого вы можете использовать tidyr complete, который заполняет любые строки, которые отсутствуют в указанном векторе (в данном случае последовательность, содержащая все даты между первой и последней датами в вашем фрейме данных)

myData %>% 
  complete(Date = seq(first(Date), last(Date), by = "day"))

#> # A tibble: 4,018 x 5
#>    Date       FakeData  Year Month   Day
#>    <date>        <dbl> <dbl> <dbl> <int>
#>  1 2000-01-01     31.2  2000     1     1
#>  2 2000-01-02     48.6  2000     1     2
#>  3 2000-01-03     NA      NA    NA    NA
#>  4 2000-01-04     17.1  2000     1     4
#>  5 2000-01-05     15.5  2000     1     5
#>  6 2000-01-06     12.9  2000     1     6
#>  7 2000-01-07     19.8  2000     1     7
#>  8 2000-01-08     48.1  2000     1     8
#>  9 2000-01-09     47.5  2000     1     9
#> 10 2000-01-10     40.7  2000     1    10
#> # … with 4,008 more rows

Создано 17.06.2020 с помощью пакета . (v0.3.0)

...