Перегруппировка данных на основе времени выполнения отчета - PullRequest
1 голос
/ 16 февраля 2020

У меня есть папка, которая служит контейнером для стандартизированного отчета из системы. Этот отчет запускается ежедневно. Однако отчет может потребовать повторного запуска на определенную дату или диапазон дат в зависимости от пользовательских предпочтений и запросов. Таким образом, содержимое файла может значительно измениться.

Я хотел бы создать сценарий, который бы группировал уникальные даты в одном кадре данных на основе последнего времени выполнения, а другой - для данных, которые пересматриваются.

Вот упрощенная версия таблицы:

structure(list(Source = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
2L, 3L, 3L, 3L, 3L), Date = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L), .Label = c("11-Feb-20", "12-Feb-20"
), class = "factor"), FarmType = structure(c(3L, 4L, 5L, 1L, 
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L), .Label = c("AJSKJA", 
"ASKJKA", "GHDGH", "KLKIUK", "KLSAKJ"), class = "factor"), FarmName = structure(c(1L, 
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L), .Label = c("", 
"JJHGH", "JKJKK", "JUISO", "SDLLS"), class = "factor"), Perform = c(13.04144378, 
1.230474165, 1.230474165, 13.9407486, 13.9407486, 13.04144378, 
1.230474165, 1.230474165, 13.9407486, 13.9407486, 13.04144378, 
15.26566, 1.230474165, 13.9407486), RunDate = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("02/14/2020", 
"02/15/2020"), class = "factor")), class = "data.frame", row.names = c(NA, 
-14L))

Обратите внимание, что количество столбцов не меняется, однако после каждого повторного запуска количество строк может увеличиваться / уменьшаться.

Идея в том, что первая группа данных, основанная на самом последнем прогоне, будет представлять актуальную информацию (исправления, исправления и т. Д. c.), Тогда как вторая группа по существу выглядит на что пересматривается и как меняются числа и данные.

Ожидаемый результат для первой группы:

structure(list(Source = c(3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L), 
    Date = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), .Label = c("11-Feb-20", 
    "12-Feb-20"), class = "factor"), FarmType = structure(c(3L, 
    4L, 5L, 1L, 3L, 4L, 5L, 1L, 2L), .Label = c("AJSKJA", "ASKJKA", 
    "GHDGH", "KLKIUK", "KLSAKJ"), class = "factor"), FarmName = structure(c(1L, 
    2L, 3L, 4L, 1L, 2L, 3L, 4L, 5L), .Label = c("", "JJHGH", 
    "JKJKK", "JUISO", "SDLLS"), class = "factor"), Perform = c(13.04144378, 
    15.26566, 1.230474165, 13.9407486, 13.04144378, 1.230474165, 
    1.230474165, 13.9407486, 13.9407486), RunDate = structure(c(2L, 
    2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L), .Label = c("02/14/2020", 
    "02/15/2020"), class = "factor")), class = "data.frame", row.names = c(NA, 
-9L))

Ожидаемый результат для второй группы:

structure(list(Source = c(1L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L), 
    Date = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "11-Feb-20", class = "factor"), 
    FarmType = structure(c(3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L
    ), .Label = c("AJSKJA", "ASKJKA", "GHDGH", "KLKIUK", "KLSAKJ"
    ), class = "factor"), FarmName = structure(c(1L, 2L, 3L, 
    4L, 5L, 1L, 2L, 3L, 4L), .Label = c("", "JJHGH", "JKJKK", 
    "JUISO", "SDLLS"), class = "factor"), Perform = c(13.04144378, 
    1.230474165, 1.230474165, 13.9407486, 13.9407486, 13.04144378, 
    15.26566, 1.230474165, 13.9407486), RunDate = structure(c(1L, 
    1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("02/14/2020", 
    "02/15/2020"), class = "factor")), class = "data.frame", row.names = c(NA, 
-9L))

Спасибо за ваше время. Пожалуйста, дайте мне знать, если у вас есть вопросы.

1 Ответ

2 голосов
/ 16 февраля 2020

Мы могли бы сгруппировать по 'Date' и filter те группы, где 'RunDate' является последним после преобразования в Date class

library(lubridate)
library(dplyr)
new1 <- df1 %>%
            group_by(Date) %>%
            filter(mdy(RunDate) == max(mdy(RunDate)))

, и для второго набора мы можем проверить, количество отдельных элементов RunDate превышает 1

new2 <- df1 %>%
            group_by(Date) %>%
            filter(n_distinct(RunDate) > 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...