如果一组变量中的任何变量是1或0,则使用dplyr::mutate和基本any函数,我想创建一个新变量,使其成为dplyr::mutate。
数据集:
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)这也给出了一个错误:
谓词中的错误(任意(METFORMIN:GLP1_RA) == 1):找不到函数“谓词”
发布于 2018-06-02 06:52:01
提高我对答案的评论。通过以下方式:
df %>% mutate(ORALDM = +(rowSums(.[2:9]) > 0))或使用(当您想使用变量名称时):
df %>% mutate(ORALDM = +(rowSums(select(df, METFORMIN:GLP1_RA)) > 0))你得到:
二甲双胍磺酰脲甲酰基无糖噻唑烷二酮DPP4_INHIBITOR SGLT2_INHIBITOR GLP1_RA ORALDM 1 0 0 0 1 2 2 0 0 0 1
在data.table中实现相同的思想
library(data.table)
dt <- setDT(copy(df))
dt[, ORALDM := +(rowSums(.SD) > 0), .SDcols = METFORMIN:GLP1_RA][]注意:不使用+,您还可以使用as.integer或as.numeric。
https://stackoverflow.com/questions/50653963
复制相似问题