使用NULL行R填充缺少的时间序列数据

时间:2016-02-09 01:59:52

标签: r date

我有一个数据框,其中一列是日期yyyy-mm-dd,但偶尔会跳过日期,会丢失数天,数月甚至数年。如何创建缺少日期的行并用NA填充空数据槽?我尝试过here提供的解决方案,但我似乎无法让它发挥作用。我的数据框架如下:

Data <- data.frame( X = c(1:10), 
                    Y = seq.Date(as.Date("1870-01-01"),as.Date("1870-01-10"),"day"),
                    Z = rnorm(10,10,5), A = c(10:1), B = c(109:100))
Datamissing <- Data[-c(2,4,7:10),]
Datamissing

#  X          Y         Z  A   B
#1 1 1870-01-01  3.581199 10 109
#3 3 1870-01-03  6.158980  8 107
#5 5 1870-01-05 10.259756  6 105
#6 6 1870-01-06  3.077985  5 104

我想要的输出是:

Data[c(2,4,7:10),c(3:5)] <- NA
Datafilled <- Data
Datafilled

#    X          Y         Z  A   B
#1   1 1870-01-01  3.581199 10 109
#2   2 1870-01-02        NA NA  NA
#3   3 1870-01-03  6.158980  8 107
#4   4 1870-01-04        NA NA  NA
#5   5 1870-01-05 10.259756  6 105
#6   6 1870-01-06  3.077985  5 104
#7   7 1870-01-07        NA NA  NA
#8   8 1870-01-08        NA NA  NA
#9   9 1870-01-09        NA NA  NA
#10 10 1870-01-10        NA NA  NA

此外,我在列表中有一堆这些数据帧。到目前为止,我有一个data.frame,其中包含开始日期和结束日期的列表,我将其应用于新的数据框:

    days <- seq.Date(as.Date("1870-01-01"),as.Date("2016-01-01"),"day")
    QCdata <- as.data.frame(days)

然后我做了类似的事情:

    QCdata[,3] <- data_list[[1]][,3][pmatch(QCdata[,1], data_list[[1]][,3])]

其中data_list只是包含我所有数据帧的列表。

1 个答案:

答案 0 :(得分:0)

您可以使用data.table

进行自我加入
library(data.table)
setDT(Datamissing, key = "Y")

Datamissing[.(seq.Date(as.Date("1870-01-01"),
                       as.Date("1870-01-10"),"day"))]
#     X          Y          Z  A   B
# 1:  1 1870-01-01 12.9712691 10 109
# 2: NA 1870-01-02         NA NA  NA
# 3:  3 1870-01-03 14.0270033  8 107
# 4: NA 1870-01-04         NA NA  NA
# 5:  5 1870-01-05  1.3654924  6 105
# 6:  6 1870-01-06  0.6544578  5 104
# 7: NA 1870-01-07         NA NA  NA
# 8: NA 1870-01-08         NA NA  NA
# 9: NA 1870-01-09         NA NA  NA
#10: NA 1870-01-10         NA NA  NA

(我也将X作为NA离开,因为您没有指定实际上XY一对一绑定<) / p>