Для этого попробуйте использовать dplyr
. В основном мы можем просто сгруппировать по ID
и DRUG
. Для этой сгруппированной комбинации найдите первое DATE
вхождение, используя min()
. Затем, если дата после этого первого вхождения, то это повторение.
library(dplyr)
mydata %>%
group_by(ID, DRUG) %>%
mutate(FIRST_OCCURANCE = min(DATE),
EXIST_BEFORE = DATE > FIRST_OCCURANCE)
ID DATE DRUG EXIST_BEFORE FIRST_OCCURANCE
<int> <date> <chr> <lgl> <date>
1 1 2001-01-01 A FALSE 2001-01-01
2 1 2001-02-01 A TRUE 2001-01-01
3 1 2001-03-15 B FALSE 2001-03-15
4 1 2001-04-20 C FALSE 2001-04-20
5 1 2001-05-29 A TRUE 2001-01-01
6 1 2001-05-02 B TRUE 2001-03-15
7 2 2001-03-02 A FALSE 2001-03-02
8 2 2001-03-23 C FALSE 2001-03-23
9 2 2001-04-04 D FALSE 2001-04-04
10 2 2001-05-05 B FALSE 2001-05-05
Я разбил его на две переменные, чтобы показать, что происходит, но вы также можете уменьшить строку mutate()
просто до:
mutate(EXIST_BEFORE = DATE > min(DATE))
Похоже, что "это" - просто неявное название параметра. В выражениях запроса это обеспечивается переменной диапазона, но Вы не указываете название параметра в вызове к Where
, таким образом, похоже, что это просто использует "его" неявно.
Я соглашаюсь, что это плохо документируется хотя :(