选择多个答案时创建一个变量——在 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
)
)
rowSums
或 Reduce
更短
df$drug_poly <- ifelse(rowSums(df[drugs]) > 1, 1, 0)
df$drug_poly <- ifelse(Reduce(`+`, df[drugs]) > 1, 1, 0)
我正在努力处理一些 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
)
)
rowSums
或 Reduce
df$drug_poly <- ifelse(rowSums(df[drugs]) > 1, 1, 0)
df$drug_poly <- ifelse(Reduce(`+`, df[drugs]) > 1, 1, 0)