我正在使用藥物濫用警告網絡數據來分析ER訪問中的常見藥物組合。每種額外的藥物都通過變量DRUGID_1 .... 16中的數字編碼。所以Pt1可能有DRUGID_1 = 44(可卡因)和DRUGID_3 = 20(海洛因),而Pt2可能有DRUGID_1 = 20(海洛因),DRUGID_3 = 44(可卡因)。R功能可在多個列之間創建唯一的指示變量值
我希望我的函數循環遍歷DRUGID_1 ... 16,並且對於200萬患者中的每一個爲每個獨特的藥物提及創建一個新的二元變量列,併爲該pt設置值爲1。因此,二元變量Heroin的值爲1表示在提到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.同時將唯一計數增加1 。否則DRUGID_1的值已經在列表respDRUGID然後設置r.DRUGID = 1
我想我已經看到get()和apply()函數的建議,但我沒有按照如何使用它們。生成的數據幀必須採用相同的obs x變量格式,因此合併將與調查設計人員權重變量保持一致。
如果您提供樣本數據,您更有可能獲得幫助。用'dput'提供最少的樣本數據是首選 – epi99