我想用 NA
为任何缺失的一天。 在下面的代码中,我创建了一些 Date
与 Fake Data
. 我故意删除了一些天,只是为了反映我的情况。我想要一个连续的记录,并在没有值的地方使用NA作为DayDate。比如说,我想用NA来表示DayDate,在我没有值的地方。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 重读包 (v0.3.0)
您可以 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'))