Группировка по и условиям в R

#r #conditional-statements

Вопрос:

У меня есть фрейм данных с похожими названиями, курсами, уроком и завершением.

 name <- c("John", "John", "John", "Sam", "Sam")
course <- c("Driving", "Driving", "Driving", "Cycling", "Cycling")
lesson <- c("Gears", "Parking", "Overtaking", "Balancing", "Turning")
completion <- c(1, 0, 1, 1, 1)
df_school <- data.frame(name, course, lesson, completion)
 

Я хочу изменить все завершение на 0, если ученик не завершил ни одного урока. Результат должен быть:

 name <- c("John", "John", "John", "Sam", "Sam")
course <- c("Driving", "Driving", "Driving", "Cycling", "Cycling")
lesson <- c("Gears", "Parking", "Overtaking", "Balancing", "Turning")
completion <- c(0, 0, 0, 1, 1)
df_completed <- data.frame(name, course, lesson, completion)
 

Спасибо

Ответ №1:

Автор: dplyr

 df_school %>%
  group_by(name) %>%
  mutate(completion =  all(completion == 1))

  name  course  lesson     completion
  <chr> <chr>   <chr>           <dbl>
1 John  Driving Gears               0
2 John  Driving Parking             0
3 John  Driving Overtaking          0
4 Sam   Cycling Balancing           1
5 Sam   Cycling Turning             1
 

Ответ №2:

С dplyr :

 library(dplyr)
df_school %>% group_by(name) %>%
  mutate(completion= (length(completion) == sum(completion)))
 

Выход:

   name  course  lesson     completion
  <chr> <chr>   <chr>           <int>
1 John  Driving Gears               0
2 John  Driving Parking             0
3 John  Driving Overtaking          0
4 Sam   Cycling Balancing           1
5 Sam   Cycling Turning             1