簡體   English   中英

根據 R 中的其他行選擇滿足條件的行

[英]Selecting rows that meet a condition depending on other rows in R

我在 R 工作,以識別疾病的事件病例。 每位患者多年來有多次就診(dataframe 的每一行是一次就診),並且要被標記為“事件”,就診必須滿足以下標准:

  • 感染測試必須為陽性(感染 == “是”)
  • 該患者在過去兩年中尚未對感染呈“陽性”

我的數據如下所示:

在此處輸入圖像描述

我想創建一個新變量,指示每次訪問是否是事件感染病例。 例如,output 應如下所示:

在此處輸入圖像描述

如所見,患者可能不止一次發生事故。 任何時候他們的感染測試呈陽性並且在過去兩年中也沒有再次進行陽性感染測試,他們被認為是事件。

我找不到在 R 中獲取此 output 的有效方法。 可以使用 dplyr 完成嗎? 將不勝感激任何幫助。

一種方法是計算感染事件之間的時間差( event_diff )。 然后, incident將發生在此差異大於 2 年或差異為 0 時(假設多個測試未在同一日期進行)。 現在看這個,我懷疑有更好的替代解決方案。

df <- data.frame(
  patient_id = c(1,1,1,1,1,1,2,2,2,2),
  infection = c("no", "yes", "yes", "no", "yes", "yes", "yes", "no", "no", "yes"),
  date = c("2005-02-22", "2005-04-26", "2005-05-06", "2006-05-22", "2007-08-19", "2007-12-15", "2005-10-24", "2005-11-11", "2006-07-12", "2007-12-01")
)

df$date <- as.Date(df$date, "%Y-%m-%d")

library(dplyr)

df %>%
  group_by(patient_id, infection) %>%
  mutate(event_diff = coalesce(date - lag(date), 0)) %>%
  mutate(incident = ifelse(infection == "yes" & (event_diff == 0 | event_diff > (365*2)), "yes", "no"))

   patient_id infection date       event_diff incident
        <dbl> <fct>     <date>     <drtn>     <chr>   
 1          1 no        2005-02-22   0 days   no      
 2          1 yes       2005-04-26   0 days   yes     
 3          1 yes       2005-05-06  10 days   no      
 4          1 no        2006-05-22 454 days   no      
 5          1 yes       2007-08-19 835 days   yes     
 6          1 yes       2007-12-15 118 days   no      
 7          2 yes       2005-10-24   0 days   yes     
 8          2 no        2005-11-11   0 days   no      
 9          2 no        2006-07-12 243 days   no      
10          2 yes       2007-12-01 768 days   yes     

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM