Найдите повторяющиеся строки на основе 2 столбцов и выберите первую и последнюю строки в кадре данных - PullRequest
2 голосов
/ 05 августа 2020

У меня есть такой фрейм данных

uuid  item   timestamp     value
  1    1     2020-07-15      1
  1    1     2020-08-16      2
  1    2     2020-07-15      2
  1    2     2020-07-15      2
  1    2     2020-08-16      3
  2    1     2020-07-18      1
  2    1     2020-07-18      2
  2    1     2020-08-16      2
  2    1     2020-08-17      3
  2    2     2020-07-18      1
  2    2     2020-08-11      2
  2    2     2020-08-17      1

участники закончили более 2 раз по каждому пункту, я хочу выбрать ответы, которые завершены в раннем списке и самую последнюю дату, в качестве теста и повторного тестирования. Полученные данные могут быть представлены следующим образом:

uuid  item   timestamp     value
  1    1     2020-07-15      1
  1    1     2020-08-16      2   
  1    2     2020-07-15      2
  1    2     2020-07-15      2   (deplicated row)
  1    2     2020-08-16      3
  2    1     2020-07-18      1
  2    1     2020-07-18      2   (deplicated row)
  2    1     2020-08-16      2   (deplicated row)
  2    1     2020-08-17      3
  2    2     2020-07-18      1
  2    2     2020-08-11      2   (deplicated row)
  2    2     2020-08-17      1

Чтобы достичь своей цели, как я могу сделать в R?

1 Ответ

3 голосов
/ 05 августа 2020

Один dplyr вариант может быть:

df %>%
 mutate(timestamp = as.Date(timestamp, format = "%Y-%m-%d")) %>%
 group_by(uuid, item) %>%
 slice(c(which.min(timestamp), which.max(timestamp)))

   uuid  item timestamp  value
  <int> <int> <date>     <int>
1     1     1 2020-07-15     1
2     1     1 2020-08-16     2
3     1     2 2020-07-15     2
4     1     2 2020-08-16     3
5     2     1 2020-07-18     1
6     2     1 2020-08-17     3
7     2     2 2020-07-18     1
8     2     2 2020-08-17     1
...