Q:

Conditional statement within group

I have a dataframe in which I want to make a new column with values based on condition within groups. So for the dataframe below, I want to make a new column n_actions which gives 
Cond1. for the whole group GROUP the number 2 if a 6 appears in column STEP
Cond 2. for the whole group GROUP the number 3 if a 9 appears in column STEP
Cond 3. if not a 6 or 9 appears within column STEP for the GROUP, then 1
#dataframe start
dataframe <- data.frame(group = c("A", "A", "A", "B", "B", "B", "B", "B", "B", "C", "C", "C", "D", "D", "D", "D", "D", "D", "D", "D", "D"),
               step = c(1, 2, 3, 1, 2, 3, 4, 5, 6, 1, 2, 3, 1, 2, 3, 4, 5, 6, 7, 8, 9))

# dataframe desired
dataframe$n_actions <- c(rep(1, 3), rep(2, 6,), rep(1, 3), rep(3, 9))

A:

Another way with dplyr's case_when:
library(dplyr)

dataframe %>% 
  group_by(group) %>%
  mutate(
    n_actions1 = case_when(
      9 %in% step ~ 3,
      6 %in% step ~ 2,
      TRUE ~ 1
    )
  )

Output:
# A tibble: 21 x 3
# Groups:   group [4]
   group  step n_actions
   <fct> <dbl>     <dbl>
 1 A         1         1
 2 A         2         1
 3 A         3         1
 4 B         1         2
 5 B         2         2
 6 B         3         2
 7 B         4         2
 8 B         5         2
 9 B         6         2
10 C         1         1
11 C         2         1
12 C         3         1
13 D         1         3
14 D         2         3
15 D         3         3
16 D         4         3
17 D         5         3
18 D         6         3
19 D         7         3
20 D         8         3
21 D         9         3

