Мне нужно получить значения списка оценок (математика, язык, наука, и т. Д. c.) При условии наличия действительных значений в 2016 году (validity_2016
== «да») в новую переменную называется grades_{subjects}
(например, grades_math).
df<-tibble(person = c("Alice", "Bob", "Mary"),
validity_2016 = c(NA, "yes", NA),
likes_ham = c("no", "yes", "yes"),
grades_math_2015=c(6,2,4),
grades_math_2016=c(3,5,7),
grades_language_2015=c(7,1,9),
grades_language_2016=c(3,6,7),
grades_sci_2015=c(7,1,9),
grades_sci_2016=c(3,6,7))
Мне было интересно, можно ли использовать dplyr
s mutate_at
или mutate(across
следующим образом:
dplyr::mutate(across(grades_math_2016, grades_language_2016,grades_sci_2016),
~dplyr::case_when(!is.na(validity_2016)~list(grades_math_2015,grades_language_2015,grades_sci_2015)~.),
.names="{col}"))
Результат должен выглядеть так:
df<-tibble(person = c("Alice", "Bob", "Mary"),
validity_2016 = c(NA, "yes", NA),
likes_ham = c("no", "yes", "yes"),
grades_math_2015=c(6,2,4),
grades_math_2016=c(3,5,7),
grades_language_2015=c(7,1,9),
grades_language_2016=c(3,6,7),
grades_sci_2015=c(7,1,9),
grades_sci_2016=c(3,6,7),
grades_math=c(6,5,4),
grades_language=c(7,6,7),
grades_sci=c(7,6,9))