[英]Ifelse statement with multiple conditions using dplyr::mutate/mutate_if
我想創建一個新的變量,使得它是1
,如果從任何一組變量的變量是1
或0
,否則使用dplyr::mutate
和鹼any
功能。
數據集:
df <- structure(list(ID = 1:2, METFORMIN = c(0L, 0L), SULPHONYLUREA = c(0L, 0L), MEGLITINIDE = c(0L, 0L), ACARBOSE = c(0L, 0L),
THIAZOLIDINEDIONE = c(0L, 0L), DPP4_INHIBITOR = c(0L, 0L), SGLT2_INHIBITOR = c(1L, 1L), GLP1_RA = c(0L, 0L)),
.Names = c("ID", "METFORMIN", "SULPHONYLUREA", "MEGLITINIDE", "ACARBOSE", "THIAZOLIDINEDIONE", "DPP4_INHIBITOR",
"SGLT2_INHIBITOR", "GLP1_RA"), class = "data.frame", row.names = c(NA, -2L))
數據結構:
# ID METFORMIN SULPHONYLUREA MEGLITINIDE ACARBOSE THIAZOLIDINEDIONE DPP4_INHIBITOR SGLT2_INHIBITOR GLP1_RA
# 1 0 0 0 0 0 0 1 0
# 2 0 0 0 0 0 0 1 0
所需的數據結構:
# ID METFORMIN SULPHONYLUREA MEGLITINIDE ACARBOSE THIAZOLIDINEDIONE DPP4_INHIBITOR SGLT2_INHIBITOR GLP1_RA ORALDM
# 1 0 0 0 0 0 0 1 0 1
# 2 0 0 0 0 0 0 1 0 1
代碼1:
df %>% mutate(ORALDM = if_else(any(METFORMIN:GLP1_RA) == 1, 1, 0))
這無法提供所需的輸出並產生錯誤:
警告消息:1:在METFORMIN:GLP1_RA中:數值表達式具有2個元素:僅第一個使用2:在METFORMIN:GLP1_RA中:數值表達式具有2個元素:僅第一個使用
代碼2:
df %>% mutate_if(predicate(any(METFORMIN:GLP1_RA) == 1), 1)
這也會產生一個錯誤:
謂詞錯誤(any(METFORMIN:GLP1_RA)== 1):找不到函數“謂詞”
將我的評論提升為答案。 附:
df %>% mutate(ORALDM = +(rowSums(.[2:9]) > 0))
或與(當您要使用變量名時):
df %>% mutate(ORALDM = +(rowSums(select(df, METFORMIN:GLP1_RA)) > 0))
你得到:
ID METFORMIN SULPHONYLUREA MEGLITINIDE ACARBOSE THIAZOLIDINEDIONE DPP4_INHIBITOR SGLT2_INHIBITOR GLP1_RA ORALDM 1 1 0 0 0 0 0 0 1 0 1 2 2 0 0 0 0 0 0 1 0 1
使用data.table實現相同的想法:
library(data.table)
dt <- setDT(copy(df))
dt[, ORALDM := +(rowSums(.SD) > 0), .SDcols = METFORMIN:GLP1_RA][]
注意: as.integer
使用+
,您還可以使用as.integer
或as.numeric
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.