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

问题描述 投票:1回答:1

我想用 NA 为任何缺失的一天。 在下面的代码中,我创建了一些 DateFake 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)
r dataframe tidyverse na lubridate
1个回答
2
投票

你可以使用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)


2
投票

您可以 merge myDataDF 以获得所有的日子与 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'))
© www.soinside.com 2019 - 2024. All rights reserved.