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

时间:2017-11-26 19:35:51

标签: r repeat

  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 )。

我想知道每个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

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

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

我们按照' Img'并减去时间'来自first'时间'

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

或使用ave

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