Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过R中的时间识别变量的变化_R - Fatal编程技术网

通过R中的时间识别变量的变化

通过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,那么我们可以执行类似的操作

我正在研究重症监护病房的拔管率在流感大流行期间是如何变化的

我有一个数据集,在一类气道类型旁边有每小时的时间戳,简化如下:

时间 气囊状态 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
,那么我们可以执行类似的操作

# 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
和患者(?)id
id

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