2017-07-25 11 views
0

私は、患者が多くの異なる患者を服用している各処方について複数の観察を含むデータセットを扱っています。患者は、典型的には、自分のバイナリ変数として示されるいくつかの薬物のうちの1つをとります。Drug1Drug2などです。2つの変数に対応する列の行を選択するR

私はある薬から他の薬に切り替えた個体、すなわち1Drug1の列に、Drug2に入れていますが、これらは異なる行で発生します。

私は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

、のmutateは、結果はあなたが望むものを与え検証するために有用であることができます。 –

+0

これは両方の薬を服用した人を見つけるが、問題は1つの薬を服用してから別の薬に切り替えた人のためである。同時に両方の薬を服用すれば数えられないかもしれません。 –

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が投稿したものとは異なる動作をします。あなたが両方の薬を服用した個人を欲しいのであれば、彼らが同時に服用してもいなくても、Brandonの答えは正しいようです。私の答えは、あなたが両方の薬を服用した個人を取得します。 –

関連する問題