Как я могу найти первое и последнее вхождения элемента в 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