通过R中的时间识别变量的变化
我正在研究重症监护病房的拔管率在流感大流行期间是如何变化的 我有一个数据集,在一类气道类型旁边有每小时的时间戳,简化如下: 时间 气囊状态 2020/01/01 00:00 ETT/LMA 2020/01/01 01:00 ETT/LMA 2020/01/01 02:00 自有气道 2020/01/01 03:00 自有气道 2020/01/01 04:00 ETT/LMA通过R中的时间识别变量的变化,r,R,我正在研究重症监护病房的拔管率在流感大流行期间是如何变化的 我有一个数据集,在一类气道类型旁边有每小时的时间戳,简化如下: 时间 气囊状态 2020/01/01 00:00 ETT/LMA 2020/01/01 01:00 ETT/LMA 2020/01/01 02:00 自有气道 2020/01/01 03:00 自有气道 2020/01/01 04:00 ETT/LMA 你的想法是正确的。您可以跳过存储中间结果,但无论如何都必须对其进行估计。假设您的数据名为df,那么我们可以执行类似的操作
你的想法是正确的。您可以跳过存储中间结果,但无论如何都必须对其进行估计。假设您的数据名为
df
,那么我们可以执行类似的操作
# Read table: (Could get read.table to work)
library(data.table)
df <- fread("Time AirwayStatus
2020/01/01 00:00 ETT/LMA
2020/01/01 01:00 ETT/LMA
2020/01/01 02:00 Own Airway
2020/01/01 03:00 Own Airway
2020/01/01 04:00 ETT/LMA")
setDF(df)
# Convert time to a date format
df$Time <- as.POSIXct(df$Time)
n <- nrow(df)
# Find changes
df$change <- with(df, c(FALSE, AirwayStatus[seq(n - 1)] != AirwayStatus[seq(2, n)]))
# estimate the length of time since last change
df$hours_between_change[df$change] <- with(df, diff(c(NA, Time[change])) / 3600)
df
Time AirwayStatus change hours_between_change
1 2020-01-01 00:00:00 ETT/LMA FALSE NA
2 2020-01-01 01:00:00 ETT/LMA FALSE NA
3 2020-01-01 02:00:00 Own Airway TRUE NA
4 2020-01-01 03:00:00 Own Airway FALSE NA
5 2020-01-01 04:00:00 ETT/LMA TRUE 2
#Read table:(可以让Read.table工作)
库(数据表)
df这里是一种使用dplyr的方法
首先,您可能需要考虑一个单独的列来指示插管或拔管“事件”。如果某人是“自己的气道”,然后上一行有“ETT/LMA”,我们假设该人已被拔管。插管时也可确定相反的情况
然后,您可以筛选并只关注这些事件
对于每个事件,您可能希望捕获事件为“拔管”的时间,然后是“插管”,时差<48小时。如果这是真的,那么拔管实际上是“拔管失败”
这可能会处理以下情况:有人的数据以“自己的气道”开始,并进行插管(如果没有拔管事件,则拔管不可能失败)。在时差大于48小时的情况下,它还将保留拔管事件
library(tidyverse)
df %>%
mutate(Event = case_when(
AirwayStatus == "Own Airway" & lag(AirwayStatus) == "ETT/LMA" ~ "Extubation",
AirwayStatus == "ETT/LMA" & lag(AirwayStatus) == "Own Airway" ~ "Intubation",
TRUE ~ NA_character_)
) %>%
filter(!is.na(Event)) %>%
mutate(Event = ifelse(
Event == "Extubation" & lead(Event) == "Intubation" & (lead(Time) - Time < 48),
"Failed Extubation",
Event
))
数据
df <- structure(list(Time = structure(c(1577858400, 1577862000, 1577865600,
1577869200, 1577872800), class = c("POSIXct", "POSIXt"), tzone = ""),
AirwayStatus = c("ETT/LMA", "ETT/LMA", "Own Airway", "Own Airway",
"ETT/LMA"), Event = c(NA, NA, "Extubated", NA, "Intubated"
)), row.names = c(NA, -5L), class = "data.frame")
df使用来自:
假设您有一个数据帧(或TIBLE)df
和患者(?)idid
:
library(dplyr)
df <- tibble(
ID = c(1,1,1,1,1),
Time = c("2020/01/01 00:00", "2020/01/01 01:00", "2020/01/01 02:00", "2020/01/01 03:00", "2020/01/01 04:00"),
AirwayStatus = c("ETT/LMA", "ETT/LMA", "Own Airway", "Own Airway", "ETT/LMA"))
df <- df %>%
group_by(ID) %>%
arrange(Time) %>%
mutate(
Extubated = ifelse(AirwayStatus == "Own Airway" & lag(AirwayStatus) == "ETT/LMA", TRUE, FALSE),
Intubated = ifelse(AirwayStatus == "ETT/LMA" & lag(AirwayStatus) == "Own Airway", TRUE, FALSE))
result <- df %>%
summarise_at(c("Extubated", "Intubated"), sum, na.rm = TRUE)
result
库(dplyr)
df%
安排时间%>%
变异(
拔管=ifelse(AirwayStatus=“自有气道”和lag(AirwayStatus)=“ETT/LMA”,真、假),
插管=ifelse(气道状态=“ETT/LMA”和lag(气道状态=“自身气道”,真、假))
结果%
总结(c(“拔管”、“插管”),总和,na.rm=TRUE)
结果
结果:
# A tibble: 1 x 3
ID Extubated Intubated
<dbl> <int> <int>
1 1 1 1
#一个tible:1 x 3
ID拔管插管
1 1 1 1
这允许按患者id进行分组,您很可能会这样做
这是我用过的,而且效果不错。我暂时取消了“排列方式”和“分组方式”功能,以便查看数据,但正如您所建议的那样,我确实有患者ID,因此这非常有效。谢谢:)如果它对您有效,您可以将答案标记为已接受;)太棒了,谢谢!
# A tibble: 1 x 3
ID Extubated Intubated
<dbl> <int> <int>
1 1 1 1