我是 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 中为此开发一些代码吗?
提前致谢。
这种方法将为您提供一个可以实现您想要的结果的汇总表。我根据您的描述创建了一个“虚拟”数据集,以说明它适用于更具代表性的数据:
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