在组内检查最后一行的值是否大于之前的值

时间:2018-12-11 17:28:50

标签: r dplyr

鉴于具有以下结构的数据框,我需要一种方法来检查每个PageID的最后一个dayID(在这种情况下为'c',但可以为'd','e'或更高)的CheckDate值始终大于“ b”,始终大于“ a”。我需要返回行,如果不是这样的话。我确定有一个聪明的dplyr解决方案,但我无法解决

这是数据:

PageID <-  c(1,1,1,2,2,2)
DayID <- c(letters[1:3], letters[1:3])
CheckDate <-as.POSIXct( c("2017-09-22", "2017-10-07", "2017-11-02", "2017-09-22", "2017-10-07", "2017-11-02") ,tz="UTC")       
df <- data.frame(PageID, DayID, CheckDate)         

和数据框:

PageID DayID CheckDate 
1        a     2017-09-22
1        b     2017-10-07
1        c     2017-11-02
2        a     2017-09-22
2        b     2017-10-07
2        c     2017-11-02

2 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,那么

df %>% group_by(PageID) %>% summarise(Check = all(diff(CheckDate) > 0))
# A tibble: 2 x 2
#   PageID Check
#    <dbl> <lgl>
# 1      1 TRUE 
# 2      2 TRUE 

完成任务。在这里,对于PageID的每组,我检查CheckDate向量是否严格增加。

答案 1 :(得分:0)

也许您正在追求这种tidyverse解决方案。
请注意,我假设不是DayID是类"factor"的列,而是假设。因此,请使用as.integer来使diff>正常工作。

library(tidyverse)

df %>%
  group_by(PageID) %>%
  mutate(DayID = as.integer(DayID),
         Greater = c(TRUE, diff(DayID) > 0)) %>%
  summarise(Greater = all(Greater))
## A tibble: 2 x 2
#  PageID Greater
#   <dbl> <lgl>  
#1      1 TRUE   
#2      2 TRUE