在 R 中使用 non-unique ID-numbers 创建循环而不是使用行号进行迭代

Creating a loop using non-unique ID-numbers in R instead of using rownumbers for the iteration

真的很难想出一个合适的标题,但希望这能解释我的问题所在:

假设我有一个数据集(或向量),其中一列是数字 Frame_ID 列,但它们不是唯一 ID。例如 Frame_ID = c( 2 , 2 ,2 , 3 , 3 , 3 , 4 , 4 , 5 , 5 , 5 , 6 , 6 , 6 , 7 , 7 , 8 , 8 , 8 , 9 , 10 , 10 , 10 , 11 等),这一直持续到 Frame_ID=159753,没有任何特定的模式或规则可以解释 Frame_ID 重复了多少次。现在我想在新列中每 30 Frame_IDs 添加一个相应的时间戳(每 30 Frame_IDs 1 秒),所以它最终看起来像这样:

Frame_ID Timestamp
2 14:30:19
2 14:30:19
2 14:30:19
3 14:30:19
... ....
30 14:30:19
31 14:30:20
31 14:30:20

我创建了这个函数,但我相信除了在概念上没有真正起作用外,它还使用行号而不是 i 的实际 Frame_ID 值。我怎样才能解决它,以便它处理迭代的实际 Frame_ID 值和 i 而不是行号?希望这是有道理的。

提前致谢,非常感谢任何提示。

real_time <- c()
start = hms('14:30:19')
for (i in 0:159753) {
  start <- data$Frame_ID[i:i+30]
  real_time[i] <- start
  i = i + 30
  start = start + 1
  print(real_time)
}

在这里使用循环听起来效率很低。这对你有用吗?

data %>%
  mutate(Timestamp = as.character(hms('14:30:19') + floor(Frame_ID/30)))
df <- data.frame(Frame_ID = c(2,2,2,3,30,31,31,39,59,60,69))

df$grp <- floor(df$Frame_ID/30)

df$Timestamp <- as.POSIXct("2000/01/01 14:30:19") + df$grp
df
#>    Frame_ID grp           Timestamp
#> 1         2   0 2000-01-01 14:30:19
#> 2         2   0 2000-01-01 14:30:19
#> 3         2   0 2000-01-01 14:30:19
#> 4         3   0 2000-01-01 14:30:19
#> 5        30   1 2000-01-01 14:30:20
#> 6        31   1 2000-01-01 14:30:20
#> 7        31   1 2000-01-01 14:30:20
#> 8        39   1 2000-01-01 14:30:20
#> 9        59   1 2000-01-01 14:30:20
#> 10       60   2 2000-01-01 14:30:21
#> 11       69   2 2000-01-01 14:30:21

format(df$Timestamp, format = "%H:%M:%S")
#>  [1] "14:30:19" "14:30:19" "14:30:19" "14:30:19" "14:30:20" "14:30:20"
#>  [7] "14:30:20" "14:30:20" "14:30:21" "14:30:21" "14:30:21"
Created on 2021-10-13 by the reprex package (v2.0.1)