Как я могу найти первое и последнее вхождения элемента в data.frame?
Я искал исчерпывающе для прямого R-перевода для FIRST. и ПОСЛЕДНИЕ. указатели в шагах SAS DATA, но не могут найти их. Для тех, кто не знаком с SAS, FIRST. является логическим, которое идентифицирует первое появление данного элемента в таблице и LAST. является логическим, которое идентифицирует последнее появление. Например, рассмотрите следующую отсортированную таблицу:
V1 V2 V3
1 1 1
1 1 2
1 2 3
1 2 4
2 3 5
2 3 6
2 4 7
2 4 8
3 5 9
3 5 10
3 6 11
3 6 12
Поскольку шаги SAS DATA читают таблицы по строкам, я могу использовать оператор вроде:
IF FIRST.V1 THEN DO ...
FIRST.V1 вернет TRUE тогда и только тогда, когда это первый случай, когда наблюдение встречается в V1. Другими словами, он вернется для V1 [1] (первое появление "1" ), V1 [5] (первое появление "2" ) и V1 [9] (первое появление "3",). Последний. указатель функционирует аналогичным образом, но с окончательным появлением этого элемента.
Есть ли что-нибудь в R, которое эмулирует это?
Ответы
Ответ 1
Вы можете сделать это с дублированием и rev (для LAST):
> v1=c(1,1,1,2,2,3,3,3,3,4,4,5)
> data.frame(v1,FIRST=!duplicated(v1),LAST=rev(!duplicated(rev(v1))))
v1 FIRST LAST
1 1 TRUE FALSE
2 1 FALSE FALSE
3 1 FALSE TRUE
4 2 TRUE FALSE
5 2 FALSE TRUE
6 3 TRUE FALSE
7 3 FALSE FALSE
8 3 FALSE FALSE
9 3 FALSE TRUE
10 4 TRUE FALSE
11 4 FALSE TRUE
12 5 TRUE TRUE