#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