簡體   English   中英

使用dplyr :: mutate / mutate_if具有多個條件的Ifelse語句

[英]Ifelse statement with multiple conditions using dplyr::mutate/mutate_if

我想創建一個新的變量,使得它是1 ,如果從任何一組變量的變量是10 ,否則使用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 

使用實現相同的想法:

library(data.table)
dt <- setDT(copy(df))

dt[, ORALDM := +(rowSums(.SD) > 0), .SDcols = METFORMIN:GLP1_RA][]

注意: as.integer使用+ ,您還可以使用as.integeras.numeric

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM