繁体   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