R - как применить вывод ifelse (str_detect ...) ко всей группе - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь пометить все экземпляры в группе, если одна переменная содержит значения «PICU» или «CCCU» (или оба).

    library(dplyr)

# construct sample tibble:
df <- tibble(
  key = rep(1:7, 3),
  Unit = rep(c('7A', '2B','CCCU', 'PICU'), length = 21))

Я использую следующий код, который помечает только строки, содержащие эти термины, но не остальные в этой группе.

icu <- qlik %>%
  select(key, Unit) %>%
  group_by(key) %>%
  mutate(ICU = ifelse(str_detect(Patient_Unit, 'PICU|CCCU') == 'TRUE', 1, 0))

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Это результат, который вы ищете?

> flag <- c('PICU', 'CCCU')
> df %>%
+   group_by(key) %>%
+     mutate(ICU = Patient_Unit %in% flag)

# A tibble: 21 x 3

# Groups:   key [7]
     key Patient_Unit ICU 
   <int> <chr>        <lgl>
 1     1 7A           FALSE
 2     2 2B           FALSE
 3     3 CCCU         TRUE 
 4     4 PICU         TRUE 
 5     5 7A           FALSE
 6     6 2B           FALSE
 7     7 CCCU         TRUE 
 8     1 PICU         TRUE 
 9     2 7A           FALSE
10     3 2B           FALSE
# ... with 11 more rows
0 голосов
/ 11 декабря 2018

Мы можем сделать

df %>% select(key, Unit) %>%
  group_by(key) %>% mutate(ICU = 1 * any(c("PICU", "CCCU") %in% Unit))
# A tibble: 21 x 3
# Groups:   key [7]
#      key Unit    ICU
#    <int> <chr> <dbl>
#  1     1 7A        1
#  2     2 2B        1
#  3     3 CCCU      1
#  4     4 PICU      1
#  5     5 7A        1
#  6     6 2B        1
#  7     7 CCCU      1
#  8     1 PICU      1
#  9     2 7A        1
# 10     3 2B        1
# ... with 11 more rows

Так что вся группа ICU будет равна 1, если any из PICU и CCCU находится среди значений Unit в соответствующемгруппа.

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