如何在Dataframe R中仅添加缺少的日期

时间:2018-05-05 17:08:19

标签: r dataframe dplyr

我有下面提到的数据框:

Date        Val1     Val2
2018-04-01  125      0.05
2018-04-03  458      2.99
2018-04-05  354      1.25

我想在数据框中考虑Sys.Date()(此处为Sys.Date()为2018-04-06),仅添加缺少的日期,相应的val1和val2为0。

我尝试过:t2<-merge(data.frame(Date= seq(min(ymd(t1$Date)), max(ymd(date)), by = "days")), t1, by = "Date", all = TRUE)

必填数据框:

Date        Val1     Val2
2018-04-01  125      0.05
2018-04-02  0        0
2018-04-03  458      2.99
2018-04-04  0        0
2018-04-05  354      1.25
2018-04-06  0        0

3 个答案:

答案 0 :(得分:4)

可以使用library(tidyverse) df1 %>% complete(Date = seq(Date[1], Sys.Date(), by = "1 day"), fill = list(Val1 = 0, Val2 = 0))

完成此操作
fill

如果我们需要为fill传递多个变量,请创建nm1 <- setdiff(names(df1), "Date") #in this example excluding the Date nm2 <- setNames(as.list(rep(0, length(nm1))), nm1) 所需的列列表

fill

然后将其作为df1 %>% complete(Date = seq(Date[1], Sys.Date(), by = "1 day"), fill = nm2) # A tibble: 35 x 3 # Date Val1 Val2 # <date> <dbl> <dbl> # 1 2018-04-01 125 0.05 # 2 2018-04-02 0 0 # 3 2018-04-03 458 2.99 # 4 2018-04-04 0 0 # 5 2018-04-05 354 1.25 # 6 2018-04-06 0 0 # 7 2018-04-07 0 0 # 8 2018-04-08 0 0 # 9 2018-04-09 0 0 #10 2018-04-10 0 0 # ... with 25 more rows

的参数传递
viewpager.getCurrentItem()

答案 1 :(得分:3)

您可以使用padrpadr用于填写缺少的日期值。 首先,根据间隔添加缺失日期,如果您不想要NA,则用一个值(或最大值的函数)填充它们

编辑:添加end_val以包括运行直到sys.Date()

library(padr)
# Specify end_val to go all the way to sys.Date and add 1 to include sys.Date
padded_df <- pad(df, interval = "day", end_val = Sys.Date()+1)
padded_df <- fill_by_value(padded_df, value = 0)
padded_df

        Date Val1 Val2
1 2018-04-01  125 0.05
2 2018-04-02    0 0.00
3 2018-04-03  458 2.99
4 2018-04-04    0 0.00
5 2018-04-05  354 1.25
.....

31 2018-05-01    0    0
32 2018-05-02    0    0
33 2018-05-03    0    0
34 2018-05-04    0    0
35 2018-05-05    0    0
36 2018-05-06    0    0

答案 2 :(得分:2)

这是对你的方法的修正,基础R。

在您的真实应用中将max(t1$Date)替换为Sys.Date()

t2<-merge(data.frame(Date= as.Date(min(t1$Date):max(t1$Date),"1970-1-1")),
          t1, by = "Date", all = TRUE)
t2[is.na(t2)] <- 0

#         Date Val1 Val2
# 1 2018-04-01  125 0.05
# 2 2018-04-02    0 0.00
# 3 2018-04-03  458 2.99
# 4 2018-04-04    0 0.00
# 5 2018-04-05  354 1.25

数据

t1 <- read.table(text="Date        Val1     Val2
'2018-04-01'  125 0.05
'2018-04-03'  458 2.99
'2018-04-05'  354 1.25",h=T,strin=F)
t1$Date <- as.Date(df$Date)