Как вы можете запустить кусок кода на разных подмножествах в R с помощью dplyr - PullRequest
1 голос
/ 08 апреля 2020

У меня есть набор данных, который я должен изменить. Я хочу запустить кусок другого кода для разных подмножеств в конвейере dplyr. Данные обрабатывают значения гликемии у пациентов в отделениях интенсивной терапии. Это выглядит так:

dfavg <- df %>%
  group_by(patientid) %>%
  mutate(icuoutcome = ifelse(row_number() != n(), 0, icuoutcome)) %>%
  mutate(strata = days) %>%
  mutate(survtime = max(days)-days) %>%
  group_by(days, add = TRUE) %>%
  mutate(gly_mean = mean(glycaemia))

Однако этот код нужен мне только в течение первых 5 дней, когда пациент находится в отделении интенсивной терапии. После этого мне нужен еще один код для работы в течение дней с 6 по 15. Я попытался использовать фильтр (дни <= 5), но затем я потерял все остальные данные. Как я могу сделать свой код таким, чтобы верхний код выполнялся для дня 1-5, другой код для 6-15, но все в том же наборе данных или в том же конвейере. Я также думал о нефильтровании, но я не думаю, что это возможно, а также об использовании group_by с условием (например, дней <= 5). </p>

Заранее спасибо

1 Ответ

2 голосов
/ 08 апреля 2020

Мы можем split данные, основанные на 'днях', и применять list соответствующих функций к выводу list

library(dplyr)
library(purrr)
split(df, df$days > 5) %>%
    map2(funslist, ~ .y(.x))

Используя небольшой воспроизводимый пример

data(mtcars)
split(mtcars$mpg, mtcars$vs) %>% 
     map2_dbl(list(mean, max), ~ .y(.x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...