Мы можем использовать summarise
с across
library(dplyr)
df %>%
mutate(n_ID = 1) %>%
group_by(niv) %>%
summarise(across(starts_with('class'), sum))
С across
, мы можем иметь несколько функций
iris %>%
summarise(across(where(is.factor), nlevels),
across(where(is.numeric), mean))
# Species Sepal.Length Sepal.Width Petal.Length Petal.Width
#1 3 5.843333 3.057333 3.758 1.199333
data
df <- structure(list(niv = c("A", "A", "A", "B", "B"), ID = c("x",
"y", "z", "u", "w"), class1 = c(10L, 15L, 11L, 17L, 18L), class2 = c(5L,
3L, 2L, 7L, 7L), class3 = c(7L, 1L, 4L, 3L, 9L)),
class = "data.frame", row.names = c(NA, -5L))