在 R 中用连续记录填充缺失值?



我正在尝试与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(

您可以使用DFmergemyData以获取附加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'))

相关内容

  • 没有找到相关文章