我有一个数据框DF,其中有许多列,一个列是日期,另一个是小时。 我的观点是,我需要在36小时之前找到PRICE(相同的数据时间。我一整天都没有24小时,所以我不能只移动数据集。 我的想法是在数据集中查找前一天和前12小时。
这是我写的,但是不起作用:
for (i in 38:nrow(DF)){
RefDay=as.Date(DF$Date[i])
HourRef=DF$Hour[i]
DF$P24[i]=DF[which(DF$Date == (RefDay-1))& which(DF$Hour == (HourRef-36)),"PRICE"]
}
这是我的DF:
'data.frame': 20895 obs. of 45 variables:
$ Hour : Factor w/ 24 levels "0","1","2","3",..: 1 2 3 4 5 6 7 8 9 10 ...
$ Date : POSIXct, format: "2016-07-01" "2016-07-01" "2016-07-01" "2016-07-01" ...
$ PRICE : num 29.4 24.7 23.4 21.9 20.2 ...
以下是我的数据示例:
DF.Hour DF.Date DF.PRICE
1 0 2016-07-01 29.36
2 1 2016-07-01 24.69
3 2 2016-07-01 23.42
4 3 2016-07-01 21.91
5 4 2016-07-01 20.19
6 5 2016-07-01 22.44
在此先感谢您的帮助!
答案 0 :(得分:0)
尝试用整天填充data.frame。您可以在tidyr中完成。它将用NA填充不存在的值。 如果您在整个data.frame中有任何NA,则可以使用lag(price,36)来查找第36个元素。
DF <- complete(DF, Hour, Date) %>% arrange(Date)
DF$Price[is.na(DF$Price)] <- lag(Price, 36)