2017-08-15 6 views
1

私は、ER訪問中の一般的な薬剤の組み合わせを分析するために薬物乱用警告ネットワークデータを使用しています。各追加薬は、変数DRUGID_1 .... 16の数字でコード化されています。したがって、Pt1はDRUGID_1 = 44(コカイン)およびDRUGID_3 = 20(ヘロイン)、Pt2はDRUGID_1 = 20(ヘロイン)、DRUGID_3 = 44(コカイン)を有する可能性がある。複数の列で一意の標識変数値を作成するR関数

私の機能はDRUGID_1 ... 16をループし、2百万人の患者のそれぞれに対して、一意的な薬剤言及のための新しいバイナリ変数列を作成し、そのptの値を1に設定します。したがって、バイナリ変数Heroinの値1は、pts DRUGID_1 .... 16のヘロインのどこかが言及されていることを示します。ここで

respDRUGID <- character(0) 
DRUGID.df <- data.frame(allDAWN$DRUGID_1, allDAWN$DRUGID_2, allDAWN$DRUGID_3) 

Count <- 0 
DrugPicker <- function(DRUGID.df){ 
    for(i in seq_along(DRUGID.df$allDAWN.DRUGID_1)){ 
    if (!'NA' %in% DRUGID.df[,allDAWN.DRUGID_1]){ 
     if (!is.element(DRUGID.df$allDAWN.DRUGID_1,respDRUGID)){ 
     Count <- Count + 1 
     respDRUGID[Count] <- as.character(DRUGID.df$allDAWN.DRUGID_1[Count]) 
     assign(paste('r', as.character(respDRUGID[Count,]), sep='.'), 1)} 
     else { 
     assign(paste("r", as.character(respDRUGID[Count,]), sep='.'), 1)} 
    } 
    } 
} 
DrugPicker(DRUGID.df) 

私が最初にそれぞれの新しいDRUGIDx値(respDRUGID)だけでなく、総数ユニークDRUGID値用のカウンタ(カウント)と、新たなデータフレーム(DRUGID.df)とを格納するためのリストを作成しようとしています関連する列だけです。

この関数は観測値を下降させることになっていますが、NA以外の場合、DRUGID_1がリストrespDRUGIDにない場合は、新しい列変数 'r.DRUGID'を作成し、値を1に設定します。それ以外の場合、DRUGID_1の値は既にrespDRUGIDのリストにあります。次にr.DRUGID = 1を設定します。

get()およびapply()関数の提案を見たことがありますが、結果のデータフレームは同じobs x変数形式でなければならないため、マージは調査デザインの人のウェイト変数と一致します。

+0

サンプルデータを提供すると、ヘルプが得られる可能性が高くなります。 'dput 'で最小のサンプルデータを提供することが望ましい – epi99

答えて

1

データと必要な結果フォーマットを推測します。

drug_df <- read.csv(text=' 
patient,DRUGID_1,DRUGID_2,DRUGID_3 
A,1,2,3 
B,2,, 
C,2,1, 
D,3,1,2 
') 

library(tidyverse) 
gather(drug_df, value = "DRUGID", ... = -patient, na.rm = TRUE) %>% 
    arrange(patient, DRUGID) %>% 
    group_by(patient) %>% 
    summarize(DRUGIDs = paste(DRUGID, collapse=",")) 

# patient DRUGIDs 
# <fctr> <chr> 
# 1  A 1,2,3 
# 2  B  2 
# 3  C  1,2 
# 4  D 1,2,3 
関連する問題