我的问题是前面几个问题的延续:Reshape data.frame from long to wide on time series
但有所不同。是1)每天的小时数不相等(较小)2)日期的开始时间变化(主要)
例如,让我们创建一个数据框,其中包含1)日期,2)小时,3)一些度量-m。如前一篇文章所述,在这里我使用reshape()将长格式转换为宽格式。但是您会看到输出(dt2),而不是从“ m.1”(或从我们的数据集中获取的“ m.2”)开始,而是从“ m.3”开始。 dt数据集的第一行。
dt <- data.frame(Date=as.Date(character()),
File=character(),
User=character(),
stringsAsFactors=FALSE)
date<-as.Date(c("2018-10-1","2018-10-2","2018-10-4"))
date2<-c(rep(date[1],11),rep(date[2],14),rep(date[3],16))
hour<-c(c(3:13),c(2:15),c(4:19))
m<-rnorm(41)
dt<-data.frame(date2,hour, m)
head(dt)
date2 hour m
1 2018-10-01 3 -0.9259174
2 2018-10-01 4 0.4172615
3 2018-10-01 5 0.3981876
4 2018-10-01 6 -0.1894735
5 2018-10-01 7 0.7387315
6 2018-10-01 8 1.2337722
If I use the
library(reshape)
dt2<-reshape(dt, idvar =c("date2"), timevar ="hour", direction = "wide")
dt2
date2 m.3 m.4 m.5 m.6 m.7 m.8 m.9 m.10 m.11 m.12 m.13
1 2018-10-01 -0.9259174 0.4172615 0.3981876 -0.1894735 0.7387315 1.23377223 -0.3740326 -0.007818602 -1.7822049 -1.304608 -1.2114172
12 2018-10-02 0.4961225 -0.6928343 0.5495917 1.9807136 -2.6065999 -1.78083806 1.3777553 -0.543557423 -0.6153750 1.223758 -1.0254392
26 2018-10-04 NA 0.6442237 0.5019143 0.5550032 -1.5300680 -0.08084971 0.5487069 0.618540806 0.3787519 0.219644 0.6488434
m.2 m.14 m.15 m.16 m.17 m.18 m.19
1 NA NA NA NA NA NA NA
12 -1.54329 0.1743518 -2.3307605 NA NA NA NA
26 NA -1.3063877 -0.6920828 -0.194381 -1.144777 1.585792 -1.320353
我要解决的一个办法是先填充缺失值。但是这需要很长时间-想象数千天。
dt_full <- data.frame(Date=as.Date(character()),
File=character(),
User=character(),
stringsAsFactors=FALSE)
udate<-unique(dt$date2)
ludate<-length(udate)
for(j in 1:ludate){
dt_sub<-subset(dt,date2==udate[j])
full_minute<-data.frame(2:19,udate[j])
colnames(full_minute)<-c("hour","date2")
dt_sub_full <-full_join(dt_sub,full_minute,by=c("hour"="hour","date2"="date2"))
o<-order(dt_sub_full["hour"])
dt_sub_full <-dt_sub_full[o,]
dt_full <-rbind(dt_sub_full,dt_full)
}
dt_full2<-reshape(dt_full, idvar =c("date2"), timevar ="hour", direction = "wide")
dt_full2
date2 m.2 m.3 m.4 m.5 m.6 m.7 m.8 m.9 m.10 m.11 m.12
17 2018-10-04 NA NA 0.6442237 0.5019143 0.5550032 -1.5300680 -0.08084971 0.5487069 0.618540806 0.3787519 0.219644
110 2018-10-02 -1.54329 0.4961225 -0.6928343 0.5495917 1.9807136 -2.6065999 -1.78083806 1.3777553 -0.543557423 -0.6153750 1.223758
121 2018-10-01 NA -0.9259174 0.4172615 0.3981876 -0.1894735 0.7387315 1.23377223 -0.3740326 -0.007818602 -1.7822049 -1.304608
m.13 m.14 m.15 m.16 m.17 m.18 m.19
17 0.6488434 -1.3063877 -0.6920828 -0.194381 -1.144777 1.585792 -1.320353
110 -1.0254392 0.1743518 -2.3307605 NA NA NA NA
121 -1.2114172 NA NA NA NA NA NA
我的问题是,请您帮我考虑一下解决此问题的更快方法吗?提前非常感谢您!