如何比较一行到下一行?

时间:2014-06-24 20:47:43

标签: r

我希望能够比较超过30个变量的2个变量的值。 示例数据如下所示:

A, B
0, 2014-05-01 13
30, 2014-05-02 14
30, 2014-05-02 15
60, 2014-05-02 15
30, 2014-05-03 08
60, 2014-05-03 09

A是一个数字。 B是格式的时间戳 - %Y-%m-%d%H。 现在,我想提取从一行到下一行的日期相同的行。而且,小时是在上面一行的一小时内。 (因此,对于行i,如果日期是14日可能和上午9点。而行i + 1日期是14日可能而小时是8或9或10.然后,它将被拉出一个单独的数据框,每个符合条件的行。

在上述数据上运行,结果将是

30, 2014-05-02 15
60, 2014-05-02 15
60, 2014-05-03 09

1 个答案:

答案 0 :(得分:1)

这是lubridate的作业:

dat <- data.frame(A = c(0,30,30,60,30,60), B =  
c("2014-05-01 13","2014-05-02 14","2014-05-02 15","2014-05-02 15","2014-05-03 08","2014-05-03 09"),
stringsAsFactors = FALSE)

library(dplyr)
library(lubridate)

您可以使用lag提取B之前的值,并使用dhours将其提前一小时:

dat %>%
  mutate(B = ymd_h(B),
         close = B <= lag(B + dhours(1))) %>%
  filter(close)

A                   B close
1 30 2014-05-02 15:00:00  TRUE
2 60 2014-05-02 15:00:00  TRUE
3 60 2014-05-03 09:00:00  TRUE