Вот возможное решение с использованием dplyr
.
Сначала воспроизведите ваши данные
DF <- data.frame(ID = rep(150:151, each=4),
time=c(1, 2, 2, 2, 1, 2, 3, 3),
EVENT=c("A", "B", "C", "D", "C", "A", "B", "D"))
target_rule <- c("C", "B", "A", "D")
Затем мы можем использовать комбинацию команд из dplyr
для заказа, выбора и т. Д.
Ниже я использую факторную версию вашего EVENT
, чтобы отсортировать их в соответствии с вашим правилом taget.
library("dplyr")
DF %>%
group_by(ID, time) %>% # Consider each combo of ID and time
mutate(fevent=factor(EVENT, levels=target_rule)) %>% # Create ordered version of EVENT
arrange(fevent) %>% # Sort according to rule
summarise(EVENT=first(EVENT)) %>% # Pick just the first
ungroup() %>%
arrange(ID)
Это производит
# A tibble: 5 x 5
ID time EVENT fevent rn
<int> <dbl> <fct> <fct> <int>
1 150 1 A A 1
2 150 2 C C 1
3 151 1 C C 1
4 151 2 A A 1
5 151 3 B B 1