我有一个数据框,其中一列是日期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只是包含我所有数据帧的列表。
答案 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
离开,因为您没有指定实际上X
与Y
一对一绑定<) / p>