Удалить строки по максимальной дате - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть следующий фрейм данных:

Date Pulled         Date      Col3   Col4
2019-01-19     2019-01-17        8      9
2019-01-19     2019-01-18       14      9
2019-01-20     2019-01-18        8      0
2019-01-20     2019-01-18       15     14
2019-01-18     2019-01-17       18      7

Я хочу написать логику:

Всякий раз, когда Date Pulled имеет другое значение И, учитывая, что Date Pulled значения разныесоответствующие значения Date совпадают в этом столбце, я хочу сохранить только строку с максимальным значением от Date Pulled.

Date Pulled         Date      Col3   Col4
2019-01-19     2019-01-17        8      9
2019-01-20     2019-01-18        8      0
2019-01-20     2019-01-18       15     14

Для контекста, я получаю данные ежедневно, каждый день по 7 дней.Если я свяжу результаты вместе, будут повторяющиеся даты (следовательно, повторяющиеся столбцы даты).Я хочу сохранить только самый последний отчет, который я извлекаю, отсюда максимальная дата получения

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

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

Кажется, это работает:

inner_join(
  DT, 
  DT %>% group_by(Date) %>% summarise(Pulled = max(Pulled))
)

Joining, by = c("Pulled", "Date")
      Pulled       Date Col3 Col4
1 2019-01-19 2019-01-17    8    9
2 2019-01-20 2019-01-18    8    0
3 2019-01-20 2019-01-18   15   14

где

DT = structure(list(Pulled = c("2019-01-19", "2019-01-19", "2019-01-20", 
"2019-01-20", "2019-01-18"), Date = c("2019-01-17", "2019-01-18", 
"2019-01-18", "2019-01-18", "2019-01-17"), Col3 = c(8L, 14L, 
8L, 15L, 18L), Col4 = c(9L, 9L, 0L, 14L, 7L)), row.names = c(NA, 
-5L), class = "data.frame")

(То есть я не удосужился перейти на класс даты.)

0 голосов
/ 28 февраля 2019

Предполагая, что 'Col1' и 'Col2' - это класс Date, сгруппированный по 'Col2' и filter, строки, в которых 'Col1' равен max для 'Col1'

library(dplyr)
df1 %>%
    group_by(Col2) %>% 
    filter((Col1 == max(Col1) )
# A tibble: 3 x 4
# Groups:   Col2 [2]
#  Col1       Col2        Col3  Col4
#  <date>     <date>     <int> <int>
#1 2019-01-19 2019-01-17     8     9
#2 2019-01-20 2019-01-18     8     0
#3 2019-01-20 2019-01-18    15    14

данные

df1 <- structure(list(Col1 = structure(c(17915, 17915, 17916, 17916, 
17914), class = "Date"), Col2 = structure(c(17913, 17914, 17914, 
17914, 17913), class = "Date"), Col3 = c(8L, 14L, 8L, 15L, 18L
), Col4 = c(9L, 9L, 0L, 14L, 7L)), row.names = c(NA, -5L), class = "data.frame")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...