Учитывая ввод и код ниже, используя dplyr и группы, как я могу получить результаты, показанные в выводе? Я знаю, как суммировать столбцы в группах, используя dplyr, но в этом случае мне нужно посчитать, сколько из каждого нечислового уровня было в каждом классе.
**INPUT**
Class Student Grade
1 Jack C
1 Mary B
1 Mo B
1 Jane A
1 Tom C
2 Don C
2 Betsy B
2 Sue C
2 Tayna B
2 Kim C
**CODE**
# Create the dataframe
Class <- c(1,1,1,1,1,2,2,2,2,2)
Name <- c("Jack", "Mary", "Mo", "Jane", "Tom", "Don", "Betsy", "Sue", "Tayna", "Kim")
Grade <- c("C","B","B","A","C","C","B","C","B","C")
StudentGrades <- data.frame(Class, Name, Grade)
**OUTPUT**
Class Grade-A Grade-B Grade-C
1 1 2 2
2 0 2 3
Всего 2 ответа
Мы можем использовать count
для count
частоты, а затем с pivot_wider
изменить с «длинного» на «широкий» формат
library(dplyr)
library(tidyr)
library(stringr)
StudentGrades %>%
count(Class, Grade = str_c('Grade_', Grade)) %>%
pivot_wider(names_from = Grade, values_from = n, values_fill = list(n = 0))
# A tibble: 2 x 4
# Class Grade_A Grade_B Grade_C
# <dbl> <int> <int> <int>
#1 1 1 2 2
#2 2 0 2 3
Или в base R
table(StudentGrades[c('Class', 'Grade')])
Вот базовое решение R, где используются table()
+ split()
dfout <- do.call(rbind,lapply(split(StudentGrades,StudentGrades$Class),
function(v) c(unique(v[1]),table(v$Grade))))
такой, что
> dfout
Class A B C
1 1 1 2 2
2 2 0 2 3