如何在data.frame中找到元素的第一个和最后一个出现位置?

ast*_*eri 15 r sas dataframe

我已经详尽地搜索了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
Run Code Online (Sandbox Code Playgroud)

因为SAS DATA逐行读取表,所以我可以使用如下语句:

IF FIRST.V1 THEN DO ...
Run Code Online (Sandbox Code Playgroud)

当且仅当这是第一次在V1中遇到观察时,FIRST.V1将返回TRUE.换句话说,它将为V1 [1](第一次出现'1'),V1 [5](第一次出现'2')和V1 [9](第一次出现'3')返回true ).最后.指针以类似的方式起作用,但具有该元素的最终外观.

R中有什么模仿这个吗?

Spa*_*man 22

您可以使用duplicated和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
Run Code Online (Sandbox Code Playgroud)

  • 最后也可以通过以下方式找到:`LAST =!duplicated(v1,fromLast = TRUE)` (6认同)