鉴于具有以下结构的数据框,我需要一种方法来检查每个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
答案 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