有没有办法根据两个条件和现有时间变量创建时间值?

问题描述 投票:0回答:1

我是 R 新手,我试图找出参与者 (ID) 在速度低于 2 KPH 的情况下在路口等待的时间。然后我想为此时间范围创建一个新变量,即“等待时间”。我计划根据参与者的群体和经验来比较他们的等待时间。下面是我的变量和数据的简化数据集。

身份证 经验 交界处 速度(KPH) 时间
1 1 1 行1-A 5 57.2
1 1 1 行1-A 4 58.2
1 1 1 行1-A 3 59.2
1 1 1 行1-A 2 60.2
1 1 1 行1-A 1 61.2
1 1 1 行1-A 0 62.2
1 1 1 行1-A 0 63.2
1 1 1 行1-A 1 64.2
1 1 1 行1-A 2 65.2
1 1 1 行1-A 3 66.2
1 1 1 行1-A 4 67.2
1 1 1 行1-A 5 68.2
2 2 2 行1-A 3 26.5
2 2 2 行1-A 2 27.5
2 2 2 行1-A 1 28.5
2 2 2 行1-A 0 29.5
2 2 2 行1-A 0 30.5
2 2 2 行1-A 0 31.5
2 2 2 行1-A 0 32.5
2 2 2 行1-A 1 33.5
2 2 2 行1-A 2 34.5
2 2 2 行1-A 3 35.5

在真实数据集中,有 13 个不同的路口名称(例如 ROW1-A、ROW2-A、GW1-L、GW2-R)。

每个参与者的时间变量是线性的,但每个参与者在不同的时间开始。在此示例中,参与者 1 小于 2 KPH 的时间范围在 61.2 到 64.2 之间,等待时间为 3 秒,而对于参与者 2 来说,时间范围在 28.5 到 33.5 之间,等待时间为 5 秒。新变量需要比较 3 秒和 5 秒。

任何人都可以帮助在 R/Rstudio 中为此开发一些代码吗?

提前致谢。

r time conditional-statements
1个回答
0
投票

这种方法将为您提供一个可以实现您想要的结果的汇总表。我根据您的描述创建了一个“虚拟”数据集,以说明它适用于更具代表性的数据:

library(dplyr)

df <- data.frame(ID = rep(1:10, each = 11),
                 group = rep(1:2, each = 11),
                 experience = rep(1:4, each = 11,  length.out = 110),
                 Junction = rep(c("ROW1-A", "ROW2-A", "ROW3-A","GW1-L", "GW2-R"), each = 22),
                 speed_KPH = rep(c(c(5:0,1:5), 
                                   c(4:0,0,0,1:4), 
                                   c(3:0,0,0,0,0,1:3), 
                                   c(2:0,0,0,0,0,0,0,1:2)), length.out = 110),
                 time_s = seq(1.5, 110.5, by = 1))

head(df)
ID group experience Junction speed_KPH time_s
1  1     1          1   ROW1-A         5    1.5
2  1     1          1   ROW1-A         4    2.5
3  1     1          1   ROW1-A         3    3.5
4  1     1          1   ROW1-A         2    4.5
5  1     1          1   ROW1-A         1    5.5
6  1     1          1   ROW1-A         0    6.5

# Summary df
df1 <- df %>%
  filter(speed_KPH < 2) %>% # return required range
  group_by(ID) %>% # group by person ID
  mutate(waiting_time_s = max(time_s) - min(time_s)) %>% # calculate time difference
  select(-c(speed_KPH, time_s)) %>% # Remove unneeded columns
  distinct() %>% # return one record per ID
  ungroup()

# Result
data.frame(df1)
   ID group experience Junction waiting_time_s
1   1     1          1   ROW1-A              2
2   2     2          2   ROW1-A              4
3   3     1          3   ROW2-A              6
4   4     2          4   ROW2-A              8
5   5     1          1   ROW3-A              2
6   6     2          2   ROW3-A              4
7   7     1          3    GW1-L              6
8   8     2          4    GW1-L              8
9   9     1          1    GW2-R              2
10 10     2          2    GW2-R              4
© www.soinside.com 2019 - 2024. All rights reserved.