Внутри группы проверьте, что значение последней строки больше, чем предыдущие - PullRequest
0 голосов
/ 11 декабря 2018

Учитывая кадр данных со следующей структурой, мне нужен способ проверить, что для каждого PageID значение CheckDate для последнего идентификатора дня (в данном случае «c», но может быть «d», «e» или выше)всегда больше, чем «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 голосов
/ 11 декабря 2018

Возможно, это решение 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 
0 голосов
/ 11 декабря 2018

Если я правильно понимаю ваш вопрос, то

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...