Фильтрация для двух одинаковых последовательных записей в столбце - PullRequest
0 голосов
/ 20 февраля 2020

Представьте себе фрагмент следующего фрейма данных:

       ID        ActivityName     Time         Type    Shape 
1       1             Request    0.000       Type_1      767           
2       1             Request  600.000       Type_1      767           
3       1               Start  600.000       Type_1     1376           
4       1               Start  600.000       Type_1     1376           
5       1 Schedule Activities  600.000       Type_1       15           
6       1 Schedule Activities 2062.295       Type_1       15  

Я пытаюсь создать два новых столбца на основе повторяющихся записей в ActivityName.

В частности, я хочу объединить две последующие строки для одного и того же действия в одну строку с отметкой времени начала и завершения (от Time, в секундах).

Учитывая, что не все записей в ActivityName имеет совпадающую вторую запись (однако, максимум две последовательные записи идентичны), я также хотел бы удалить таких "одиночных" строк.

Ps Хотя не видно в фрагмент фрейма данных, все уровни ActivityName встречаются неоднократно , будь то последовательно-идентичным или единым образом.

Любые идеи о том, как go об этом, будут высоко оценены.

1 Ответ

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

Предположим, что ID является переменной, которая указывает, какие записи из ActivityName должны быть сгруппированы, это должно работать:

library(tidyverse)

df %>%
  #Group by ID and ActivityName
  group_by(ID, ActivityName) %>%
  #Stay only with entries with more than 1 row
  filter(n() > 1) %>%
  #Put the min value of Time as Start and the max value as Timestamp 
  summarize (Start = min(Time),
             Timestamp = max(Time))
...