确定哪些id具有比R中的另一时间点更早的时间点

y1aodyip  于 2022-12-25  发布在  其他
关注(0)|答案(3)|浏览(128)

我正在尝试找到一种方法来返回time_2早于time_1的subject_ids
| 受试者ID|时间_1|时间_2|
| - ------| - ------| - ------|
| 191 - 5467| 18点整|晚上八点整|
| 小行星191 - 6784|十八点半|18点50分|
| 小行星191 - 3457| 19时|21点45分|
| 小行星191 - 0987| 19点半|晚上八点整|
| 小行星191 - 1245|十九点四十五分|19时|
| 小行星191 - 2365|晚上八点整|19时|
因此,在本例中,代码将返回主题id 191 - 1245和191 - 2365,因为它们的time_2都早于time_1。

n9vozmp4

n9vozmp41#

dplyr溶液:

library(dplyr)
df %>% 
  filter(strptime(Time_2, '%H:%M') < strptime(Time_1, '%H:%M')) %>% 
  pull(subject_id)
[1] "191-1245" "191-2365"
tez616oj

tez616oj2#

我们可以使用POSIXct转换为日期时间,然后执行subset

subset(df1, as.POSIXct(Time_2, format = "%H:%M") < 
    as.POSIXct(Time_1, format = "%H:%M") )$subject_id
[1] "191-1245" "191-2365"

或者使用data.table

library(data.table)
setDT(df1)[, subject_id[as.ITime(Time_2) < as.ITime(Time_1)]]
[1] "191-1245" "191-2365"

数据

df1 <- structure(list(subject_id = c("191-5467", "191-6784", "191-3457", 
"191-0987", "191-1245", "191-2365"), Time_1 = c("18:00", "18:30", 
"19:00", "19:30", "19:45", "20:00"), Time_2 = c("20:00", "18:50", 
"21:45", "20:00", "19:00", "19:00")), class = "data.frame", row.names = c(NA, 
-6L))
wribegjk

wribegjk3#

类似于@Jilber Urbina的答案,但使用lubridate

library(lubridate)
library(dplyr)

df1 |>
  # Transform Time_1 and Time_2 to hour minutes with hm
  mutate(across(starts_with("Time"), hm)) |>
  # Filter to condition of interest
  filter(Time_2 < Time_1) |>
  # Pull the column with the id values
  pull(subject_id)

相关问题