Новый сценарий создания проблемы для отчета - PullRequest
0 голосов
/ 06 декабря 2018

Я новичок в кодировании и в R. Я пытался решить проблему для отчета, который я рисую и врезался в стену.Я провел последние два дня, пытаясь найти действенный ответ, и теперь я нахожусь в конце.

У меня есть база данных результатов учеников.Столбцы следующие:

  1. Номер студента
  2. Академический год, например, 2014, 2015 и т. Д.
  3. Академический семестр, например, январь или июнь
  4. Квалификация, например, Qual1, Qual2 и т. Д.
  5. Модули, например, Subject1, subject2 и т. Д. Здесь проблема в том, что subject1 может быть в Qual1 и Qual2, а suject2 может быть только в Qual1
  6. Result.Это либо «Пройдено», либо «НЕПРАВИЛЬНО»

Я пытаюсь создать сводку / список, показывающий процент, пройденный для каждого модуля, где учащиеся были активны.Примерно так

Year Semester Qualification Module    PassRate
2014 Jan      Qual1         Subject1  62.54%
2014 Jan      Qual1         Subject2  72.81%
.
.
.
2014 July     Qual1         Subject1  69.51%
.
.
2014 Jan      Qual2         Subject1  42.86%
2014 Jan      Qual2         Subject3  55.95%
etc.

Я думал, что, возможно, оператор IF может сработать, но это кажется слишком громоздким.Я также посмотрел на For each, но я не могу понять, как заставить это работать или комбинацию вышеупомянутого.Я пробовал aggregate, count =, cbind и все, что я мог найти от моего хорошего друга Google.

У меня есть следующий код

AcademicYears <- as.character(unique(unlist(HE_Stats$Year)))
AcademicYears_count <- NROW(AcademicYears)

AcademicSemesters <- as.character(unique(unlist(HE_Stats$ActualSemester)))
AcademicSemesters_count <- NROW(AcademicSemesters)

Qualifications <- as.character(unique(unlist(HE_Stats$Qualification)))
Qualifications_count <- NROW(Qualifications)

Modules <- as.character(unique(unlist(HE_Stats$ModuleCode)))
Modules_count <- NROW(Modules)

df <- HE_Stats %>% 
group_by(Year,ActualSemester,Qualification, ModuleCode) %>%

aggregate(cbind(count = AcademicSemesters) ~ AcademicYears,
data = HE_Stats,
FUN = function(AcademicSemesters){NROW(AcademicSemesters)})

В результате он показывает мне один семестр в год.Мой последний план - построить матрицу столбец за столбцом.

1 Ответ

0 голосов
/ 06 декабря 2018

Если бы вы могли предоставить пример данных, то могли бы дать вам лучший ответ.Но скажем, что ваши данные выглядели примерно так (в этом решении используется пакет dplyr:

library (dplyr)

data <- tibble(student_number = c(1, 2, 3, 4, 5, 6),
           academic_year = c(2014, 2014, 2014, 2015, 2015, 2015),
           semester = c("jan", "jan", "jan","jan", "june", "june"),
           qualification = c("qual1", "qual2", "qual1", "qual1", "qual2",
                             "qual2"),
           module = c("subject1", "subject1", "subject1", "subject1", 
                       "subject2", "subject2"),
           result = c("passed", "failed", "passed", "passed", "passed", 
                      "failed"))

# A tibble: 6 x 6
  student_number academic_year semester qualification module   result  
           <dbl>         <dbl> <chr>    <chr>         <chr>    <chr> 
1              1          2014 jan      qual1         subject1 passed
2              2          2014 jan      qual2         subject1 failed
3              3          2014 jan      qual1         subject1 passed
4              4          2015 jan      qual1         subject1 passed
5              5          2015 june     qual2         subject2 passed
6              6          2015 june     qual2         subject2 failed

Сначала я бы сделал логический вектор того, прошел ли объект:

data <- data %>%
  mutate(pass = ifelse(result == "passed", TRUE, FALSE))

Затем суммируем сгруппированные данные:

data %>%
  group_by(academic_year, semester, qualification, module) %>%
  summarise(
    pass_rate = (sum(pass)/n())*100
  )

Для получения:

  academic_year semester qualification module   pass_rate
          <dbl> <chr>    <chr>         <chr>        <dbl>
1          2014 jan      qual1         subject1       100
2          2014 jan      qual2         subject1         0
3          2015 jan      qual1         subject1       100
4          2015 june     qual2         subject2        50
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...