首页 > 解决方案 > 创建时间间隔并为每个唯一时间间隔分配唯一 ID

问题描述

我有一组时间已经转换为时间间隔,我想为每个唯一的时间间隔分配一个唯一的 ID。数据框 y 看起来像:

start        end
01:00:00     05:00:00
13:00:00     17:00:00
12:00:00     16:00:00
01:00:00     05:00:00
13:00:00     17:00:00

我使用以下代码创建了一个时间间隔:

y$interval = data.frame(interval=paste(start,end))

结果看起来像

start        end           interval
01:00:00     05:00:00      01:00:00 05:00:00
13:00:00     17:00:00      13:00:00 17:00:00
12:00:00     16:00:00      12:00:00 16:00:00
01:00:00     05:00:00      01:00:00 05:00:00
13:00:00     17:00:00      13:00:00 17:00:00

我现在想在 Y 中创建一个新列,为每个唯一时间间隔分配一个唯一 ID:

start        end           interval               ID
01:00:00     05:00:00      01:00:00 05:00:00      1
13:00:00     17:00:00      13:00:00 17:00:00      2
12:00:00     16:00:00      12:00:00 16:00:00      3
01:00:00     05:00:00      01:00:00 05:00:00      1
13:00:00     17:00:00      13:00:00 17:00:00      2

我尝试过使用 dplyr 的 group_indice:

y$id = group_indices(y$interval)

但它为每个间隔分配 ID 号 1。我应该怎么办?

非常感谢!

标签: r

解决方案


我正在研究一个与@H 1 刚刚所做的非常相似(相同?)的答案。请注意,所有列都是字符,因为在您的示例中并不清楚您是否真的在使用时间列。

library(dplyr)

y <- data.frame(
  stringsAsFactors = FALSE,
             start = c("01:00:00","13:00:00",
                       "12:00:00","01:00:00","13:00:00"),
               end = c("05:00:00","17:00:00",
                       "16:00:00","05:00:00","17:00:00")
)

y %>% 
  mutate(interval = paste(start, end)) %>% 
  group_by(interval) %>% 
  mutate(id = group_indices())

#> # A tibble: 5 x 4
#> # Groups:   interval [3]
#>   start    end      interval             id
#>   <chr>    <chr>    <chr>             <int>
#> 1 01:00:00 05:00:00 01:00:00 05:00:00     1
#> 2 13:00:00 17:00:00 13:00:00 17:00:00     3
#> 3 12:00:00 16:00:00 12:00:00 16:00:00     2
#> 4 01:00:00 05:00:00 01:00:00 05:00:00     1
#> 5 13:00:00 17:00:00 13:00:00 17:00:00     3

推荐阅读