R:识别一组重复项中的第一个和最后一个元素

R: Identifying the first and last elements in a repeating set of duplicates

  Img  Time
1  B    1
2  B    2
3  B    3
4  B    7
5  B    8
6  B    11
7  G    12
8  G    14
9  G    16
10 G    21

大家好,
以上是我正在使用的数据类型的过度简化版本。我有图像 (Img) 显示了一段时间 (Time)。

我想知道每个 Img 展示了多长时间,但是,我拥有的数据很难获得该信息。没有唯一值指示图像何时开始或停止,并且计时器不会在显示新图像后重置。

我想创建一个新列来显示相对于首次显示图像的时间经过了多少时间。示例如下:

  Img  Time  ElapTime
1  B    1       1
2  B    2       2
3  B    3       3
4  B    7       7
5  B    8       8
6  B    11      11
7  G    12      1
8  G    14      3
9  G    16      5
10 G    21      10

有没有办法识别重复序列中的第一个和最后一个元素?知道这一点可能会帮助我创建调整后的时间列。

非常感谢任何帮助!

我们按 'Img' 分组,然后从 first 'Time'

中减去 'Time'
library(dplyr)
df1 %>% 
   group_by(Img) %>%
   mutate(ElapTime = Time - first(Time) + 1)
# A tibble: 10 x 3
# Groups:   Img [2]
#     Img  Time ElapTime
#   <chr> <int>    <dbl>
# 1     B     1        1
# 2     B     2        2
# 3     B     3        3
# 4     B     7        7
# 5     B     8        8
# 6     B    11       11
# 7     G    12        1
# 8     G    14        3
# 9     G    16        5
#10     G    21       10

或使用 base R

中的 ave
df1$ElapTime <-  with(df1, ave(Time, Img, FUN = function(x) x- x[1]+1))