【问题标题】:R: Identifying the first and last elements in a repeating set of duplicatesR:识别重复的重复集合中的第一个和最后一个元素
【发布时间】:2017-11-27 03:51:21
【问题描述】:
  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

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

非常感谢任何帮助!

【问题讨论】:

    标签: r repeat


    【解决方案1】:

    我们按“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
    

    或者使用来自base Rave

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

    【讨论】:

    • dplyr 似乎是我所有问题的解决方案,哈哈。非常感谢,这很好用!
    猜你喜欢
    • 2021-03-14
    • 2018-02-22
    • 1970-01-01
    • 2011-08-31
    • 2019-07-12
    • 2017-11-15
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    相关资源
    最近更新 更多