【问题标题】:Creating Event Onset Variable创建事件开始变量
【发布时间】:2020-09-26 08:17:33
【问题描述】:

我的临床数据记录了患者在三个时间点的疾病结果,该疾病结果由二元变量表示。它看起来像这样

patientid <- c(100,100,100,101,101,101,102,102,102)
time <- c(1,2,3,1,2,3,1,2,3)
outcome <- c(0,1,1,0,0,1,1,1,0) 

Data<- data.frame(patientid=patientid,time=time,outcome=outcome)
Data

我想创建一个发病变量,因此对于每个患者,它将为患者首次患病的时间编码为 1,但对于之前或之后的任何时间段(即使那个病人仍然有病)。对于示例数据,它现在应该如下所示。

patientid <- c(100,100,100,101,101,101,102,102,102)
time <- c(1,2,3,1,2,3,1,2,3)
outcome <- c(0,1,1,0,0,1,1,1,0) 
outcome_onset <- c(0,1,0,0,0,1,1,0,0)

Data<- data.frame(patientid=patientid,time=time,outcome=outcome, 
outcome_onset=outcome_onset)
Data

因此,我想要一些代码/一些帮助来自动创建结果_onset 变量。

【问题讨论】:

    标签: r bioinformatics


    【解决方案1】:

    这是cumsum 的选项,用于在按“患者ID”分组后创建逻辑向量

    library(dplyr)
    Data %>% 
       group_by(patientid) %>%
       mutate(outcome_onset = +(cumsum(outcome) == 1))
    

    或者使用match和%in%

    Data %>%
       group_by(patientid) %>% 
       mutate(outcome_onset = +(row_number() %in% match(1, outcome_onset)))
    

    【讨论】:

      【解决方案2】:

      我们可以使用which.max 来获取outcome 变量中第一个的索引,并将该行设为1,其余为0。

      library(dplyr)
      
      Data %>%
        group_by(patientid) %>%
        mutate(outcome_onset = as.integer(row_number() %in% which.max(outcome)), 
               outcome_onset = replace(outcome_onset, is.na(outcome), NA))
      
      #  patientid  time outcome outcome_onset
      #      <dbl> <dbl>   <dbl>         <int>
      #1       100     1       0             0
      #2       100     2       1             1
      #3       100     3       1             0
      #4       101     1       0             0
      #5       101     2       0             0
      #6       101     3       1             1
      #7       102     1       1             1
      #8       102     2       1             0
      #9       102     3       0             0
      

      【讨论】:

      • 有没有办法解决结果列中丢失的数据...我不断收到以下警告“结果的行数不是向量长度的倍数(arg 1)”跨度>
      • @BenjaminKrick 您确定您在新的 R 会话中正确复制了代码。这个答案不应该对NA 值产生任何影响。
      • 你是对的,你的代码确实有效。试图保持不适用。例如,如果结果中有一个 n/a,那么它在结果开始时保持 n/a
      • 查看更新的答案,如果outcome 具有NA,则NA 将变为outcome_onset。
      • 有没有办法调整此代码,以便结果变量中的第一个索引并将该行设为 1,其余为 NA
      猜你喜欢
      • 2022-11-13
      • 2015-02-13
      • 1970-01-01
      • 2011-05-08
      • 2012-12-20
      • 2016-07-09
      • 2021-05-03
      • 2020-10-21
      • 1970-01-01
      相关资源
      最近更新 更多