[英]Fill missing timeseries data with NULL rows R
我有一個數據框,其中一列是日期yyyy-mm-dd,但是它偶爾會跳過日期,從而缺少幾天,幾個月甚至幾年。 如何創建缺少日期的行,並用NA填充空白數據槽? 我已經嘗試過這里提供的解決方案,但似乎無法使它起作用。 我的數據框看起來像:
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,其中包含開始日期和結束日期,將其應用於新的dataframe:
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只是包含我所有數據幀的列表。
您可以使用data.table
進行自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
,因為您沒有指定X
實際上與Y
一對一綁定)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.