R-在数据框中插入缺失天数的行

R-在数据框中插入缺失天数的行,r,R,我有一个数据框,如下所示: > head(train) S D Date 1 1 1 2010-02-05 2 1 1 2010-02-12 3 1 1 2010-02-19 “日期”列每周只有一个日期,对于当前的每个日期,我希望在提到的日期之后插入6行以表示所有缺失的日期。 因此,结果如下所示: > head(train) S D Date 1 1 1 2010-0

我有一个数据框,如下所示:

> head(train)
      S    D       Date
1     1    1 2010-02-05
2     1    1 2010-02-12
3     1    1 2010-02-19
“日期”列每周只有一个日期,对于当前的每个日期,我希望在提到的日期之后插入6行以表示所有缺失的日期。 因此,结果如下所示:

> head(train)
      S    D       Date
1     1    1 2010-02-05
1     1    1 2010-02-06 <- inserted
1     1    1 2010-02-07 <- inserted
1     1    1 2010-02-08 <- inserted
1     1    1 2010-02-09 <- inserted
1     1    1 2010-02-10 <- inserted
1     1    1 2010-02-11 <- inserted
2     1    1 2010-02-12
etc
>车头(列车)
日期
1     1    1 2010-02-05

1 2010-02-06可能有些过分,但关键是要在日期上加入“正确”的日期,然后填写:

library(dplyr)
library(zoo)

train <- data.frame(D = 1:3, S = 4:6, Date = as.Date("2010-02-05") + 7*(1:3))
full.dates <- as.Date(min(train$Date):max(train$Date), origin = "1970-01-01")
db <- data.frame(Date = full.dates)
fixed <- left_join(db, train)

# Fill from top using zoo::na.locf
fixed[ ,c("D", "S")] <- na.locf(fixed[ ,c("D", "S")])
库(dplyr)
图书馆(动物园)

训练在包
zoo
中使用
na.locf
的另一种方法,在其中创建
zoo
时间序列,并使用
na.locf
中的
xout
参数
xout
指定用于额外/插值的日期范围

library(zoo)

# either convert raw data to zoo object
z <- read.zoo(text = "S    D       Date
1     1    1 2010-02-05
2     1    1 2010-02-12
3     1    1 2010-02-19", index.column = "Date")

# ...or convert your data frame to zoo
z <- zoo(x = df[ , c("S", "D")], order.by = df$Date)

# create a sequence of dates, from first to last date in original data
tt <- seq(from = min(index(z)), to = max(index(z)), by = "day")

# expand time series to 'tt', and replace each NA with the most recent non-NA prior to it
na.locf(z, xout = tt)

#            S D
# 2010-02-05 1 1
# 2010-02-06 1 1
# 2010-02-07 1 1
# 2010-02-08 1 1
# 2010-02-09 1 1
# 2010-02-10 1 1
# 2010-02-11 1 1
# 2010-02-12 1 1
# 2010-02-13 1 1
# 2010-02-14 1 1
# 2010-02-15 1 1
# 2010-02-16 1 1
# 2010-02-17 1 1
# 2010-02-18 1 1
# 2010-02-19 1 1
图书馆(动物园)
#将原始数据转换为zoo对象
z作为一个傻瓜:-)

库(lubridate)
火车
#日期
# 1 1 2 2010-02-05
# 2 1 3 2010-02-12

ttmp您可以通过以下方式获得缺少的行数:

nMiss <- diff(as.Date(train$Date))

nMiss您希望其他列是什么?@Hugh其他列应该与本周的第一个日期(2010-02-5)重复。
nMiss <- diff(as.Date(train$Date))
longTrain <- train[rep(1:nrow(train), times=c(nMiss, 1)),]
off <- unlist(lapply(c(nMiss,1)-1, seq, from=0)
longTrain$Date <- as.Date(longTrain$Date)+off