R-根据条件查找值

时间:2018-11-09 13:34:58

标签: r which

我有一个数据框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

在此先感谢您的帮助!

1 个答案:

答案 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)