2017-07-25 72 views
0

我正在處理一個數據集,該數據集包含患者正在服用的每種處方的多個觀察值,以及許多不同的患者。患者通常服用幾種藥物中的一種,這些藥物被指示爲它們自己的二元變量,Drug1,Drug2等等。在R中的兩個變量列選擇行中的行

我試圖拔出只從一種藥物切換到另一個個體,即,在Drug1柱和Drug2一個1,但這些發生在不同的行。

我試圖使用newdata <- mydata[which(Drug1 == 1 & Drug2 == 1),]但是,這假定1是在同一行,他們不是。

是否有一種方法可以選擇已接受這兩種藥物的患者,但指示變量是否在不同的行中?

謝謝

回答

1

我相信這是你要求使用dplyr的解決方案。

data <- data.frame(id = rep(c(1, 2, 3, 4), each = 2), 
       drug1 = c(1, 0, 0, 0, 0, 1, 1, 1), 
       drug2 = c(0, 1, 1, 1, 1, 0, 0, 0) 
       ) 
library(dplyr) 
data %>% 
    group_by(id) %>% 
    mutate(both_drugs = ifelse(any(drug1 == 1) & any(drug2 == 1), 1, 0)) %>% 
    filter(both_drugs == 1) 
+0

無需發生變異,可以只'過濾器(任何(亞達)&&任何(巴達))' – Frank

+1

我同意,在發生變異可以驗證結果給你想要的東西是有用的。 –

+0

這可以找到服用了兩種藥物的個體,但是問題在於已服用一種藥物然後轉換爲另一種藥物的個體。如果他們同時服用兩種藥物,可能無法計數。 –

0

嘗試爲每種藥物創建一個變量,以指示它是否是該人當時唯一服用的唯一藥物。

data <- data.frame(id = rep(c(1, 2, 3, 4), each = 3), 
        drug1 = c(1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0), 
        drug2 = c(0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0)) 

library(dplyr) 

data %>% 
    group_by(id) %>% 
    mutate(drug1only = ifelse(drug1==1 & drug2==0, 1, 0), 
     drug2only = ifelse(drug2==1 & drug1==0, 1, 0)) %>% 
    summarise(
    drug_switch = ifelse(max(drug1only)+max(drug2only)==2,1,0)) 
+0

這工作得很好,謝謝你的幫助! – Scott

+0

它與Brandon LeBeau發佈的不同。如果你想要服用這兩種藥物的個人,不管他們是否同時服用,布蘭登的答案似乎是正確的。我的答案讓你知道服用兩種藥物的人,但只有他們在不同的時間服用藥物。 –