选择多个答案时创建一个变量——在 R 中

Creating a one variable when multiple answers are chosen -- in R

我正在努力处理一些 r 代码。在我的数据集中,我有大量关于药物使用的变量——drug_mar、drug_coc、drug_her、drug_met 等。我正在尝试为创建一个新变量多物质使用 -- drug_poly。问题是我似乎无法获得基本上询问“如果选择多个药物变量,则 drug_poly ==1”的有效代码......我觉得我可以在 SPSS 中做到这一点,但我找不到正确的 r 包或正确的语法。有什么想法吗?

这是我计划放在它后面的代码...但我仍然没有定义如何创建 drug_poly 变量。

    df <- df %>% 
      mutate(drug_type = ifelse(drug_mar == 1, 1,
           ifelse (drug_coc == 1, 2, 
                ifelse (drug_her == 1, 3,
                      ifelse (drug_met == 1, 4,
                             ifelse(drug_stim == 1, 5,
                                   ifelse(drug_ect == 1, 6,
                                         ifelse(drug_opi == 1, 7,
                                              ifelse(drug_other == 1, 8,
                                                   ifelse(drug_poly == 1, 9, NA))))))))))

假设您所有的药物变量都是二进制的 (0/1),只需使用一个 ifelse 将所有药物与算术相加并检查是否计算出超过 1:

if multiple drug variables are chosen, then drug_poly ==1

drugs <- c("drug_mar", "drug_coc", "drug_her", "drug_met",
           "drug_stim", "drug_ect", "drug_opi", "drug_other")

# CONVERT ALL NAs IN DRUG COLUMNS TO ZERO
df[drugs][is.na(df[drugs])] <- 0

# ASSIGN IF MORE THAN ONE DRUG IS CHOSEN
df$drug_poly <- with(df, ifelse((drug_mar + drug_coc + drug_her + drug_met + 
                                 drug_stim + drug_ect + drug_opi + drug_other) > 1, 1, 0
                                )
                     )

rowSumsReduce

更短
df$drug_poly <- ifelse(rowSums(df[drugs]) > 1, 1, 0)

df$drug_poly <- ifelse(Reduce(`+`, df[drugs]) > 1, 1, 0)