我正在尝试与NA
一起连续记录任何缺失的一天。 在下面的代码中,我用Fake Data
创建了一些Date
。我故意删除了一些日子只是为了反映我的情况。我想要一个连续的记录,并对我没有值的日期/日期使用 NA。例如,我的代码中的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)
您可以使用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
创建于 2020-06-17 由 reprex 软件包 (v0.3.0(
您可以使用DF
merge
myData
以获取附加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'))