РЕДАКТИРОВАТЬ
Спасибо за ваши ответы. Однако мне все еще не удалось решить свою проблему, поскольку мой набор данных содержит 700000 наблюдений, и все приведенные ниже подходы приводят к ошибке или просто продолжают работать часами без завершения (я могу сказать, что сеанс Rstudio R запущен и потребляет много моей оперативной памяти, но никуда не денется).
Как вы понимаете, разделение набора данных на более мелкие части не вариант, поскольку это противоречит цели упражнения: мне нужно просмотреть все предыдущие наблюдения, чтобы получить желаемый результат.
Любые идеи? Я пока оставлю вопрос без ответа, но если вы, ребята, подумаете, что мне следует опубликовать новый вопрос, я сделаю это (честно говоря, я не знаю этикета в отношении этих вещей, так что вы можете оставить предложение).
Исходный пост
Как следует из названия, я ищу фиктивную переменную, которая обусловлена повторениями в сгруппированных наблюдениях.
Рассмотрим следующий фрейм данных:
id name year
1 c af 2000
2 c el 2000
3 c in 2000
4 c ud 2000
5 d ot 2000
6 d an 2000
7 d el 2000
8 d un 2000
9 f yt 2002
10 f ip 2002
11 f ot 2002
12 f el 2002
13 g yt 2003
14 g af 2003
15 g ol 2003
16 g in 2003
17 h in 2003
18 h eg 2003
19 h yt 2003
20 h af 2003
21 j ot 2004
22 j el 2004
23 j ip 2004
24 j yt 2004
Я ищу функцию, которая позволит мне сгруппировать данные по идентификатору и вернуть значение «1», если идентификатор содержит не менее трех имен в предыдущем идентификаторе. Под предыдущим идентификатором я подразумеваю, что год предыдущего идентификатора должен быть меньше, чем для текущего идентификатора.
Желаемый результат должен выглядеть так:
id name year dummy
1 c af 2000 0
2 c el 2000 0
3 c in 2000 0
4 c ud 2000 0
5 d ot 2000 0
6 d an 2000 0
7 d el 2000 0
8 d un 2000 0
9 f yt 2002 0
10 f ip 2002 0
11 f ot 2002 0
12 f el 2002 0
13 g yt 2003 0
14 g af 2003 0
15 g ol 2003 0
16 g in 2003 0
17 h in 2003 0
18 h eg 2003 0
19 h yt 2003 0
20 h af 2003 0
21 j ot 2004 1
22 j el 2004 1
23 j ip 2004 1
24 j yt 2004 1
id = "j" принимает значение dummy = "1", поскольку в id = "f" встречается как минимум три имени: "yt", "ip" и "ot". В этом случае также встречается четвертое имя, «эль», но это не влияет на результат.
Обратите внимание, что id = "h" принимает значение dummy = "0", хотя три имени также встречаются в id = "g". Это потому, что оба события произошли в 2003 году, и поэтому это не соответствует условию для отдельных лет.
Данные:
DF = structure(list(id = c("c", "c", "c", "c", "d", "d", "d", "d",
"f", "f", "f", "f", "g", "g", "g", "g", "h", "h", "h", "h", "j",
"j", "j", "j"), name = c("af", "el", "in", "ud", "ot", "an",
"el", "un", "yt", "ip", "ot", "el", "yt", "af", "ol", "in", "in",
"eg", "yt", "af", "ot", "el", "ip", "yt"), year = c(2000L, 2000L,
2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2002L, 2002L, 2002L,
2002L, 2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 2003L,
2004L, 2004L, 2004L, 2004L), dummy = c(0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L,
1L, 1L)), .Names = c("id", "name", "year", "dummy"), row.names = c(NA,
-24L), class = "data.frame")