Инструкция Ifelse с несколькими условиями с использованием dplyr :: mutate / mutate_if - PullRequest
0 голосов
/ 02 июня 2018

Я хотел бы создать новую переменную так, чтобы она была 1, если любая из переменных из набора переменных равна 1 или 0 в противном случае, используя функции dplyr::mutate и base 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)

Это также дает ошибку:

Ошибка в предикате (любая (METFORMIN: GLP1_RA) == 1): не удалось найти функцию "предикат""

1 Ответ

0 голосов
/ 02 июня 2018

Продвижение моих комментариев к ответу.С:

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.numeric.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...