#r #tidyverse
Вопрос:
Петли в Ряд
У меня есть следующий набор данных, касающийся оценок учащихся.
name <- c("John", "Rachel", "Judy", "James", "Oloo")
english <- c("70", "50e", "19c", "38^", "33^")
math <- c("65", "25c", "68", "32^", "50")
science <- c("45", "50", "25c", "27e", "72")
social <- c("56", "76", "42", "23^", "68")
marks <- data.frame(name, english, math, science, social)
marks
Чтобы студент сдал экзамен, он должен сдать как непрерывную оценку, так и итоговый экзамен и набрать не менее 40% баллов по каждому предмету.
Pass
: Где у студента НЕТ e
или ^
после отметок, означающих, что все баллы равны 40 и более.
Supplementary
: Где у студента есть a ^
или an e
. ^
Средний балл меньше 40. У студентов e
может быть более 40 баллов, но они все еще не смогли пройти непрерывную оценку.
special
: У студента есть c
, но НЕТ e
или ^
.
Supplementary and special
: Сочетание дополнительного и специального. Это означает , что у студента есть e
^
или и то, и другое, и в то же время есть c
.
Discontinued
: У студента есть 4 или более e
, 4 или более ^
. Также у студента может быть комбинация e
, и ^
это происходит 4 или более раз. Задача: Для каждого учащегося (то есть строки данных) я хочу, чтобы в коде R
был возвращен новый столбец, comment
как показано ниже.
name <- c("John", "Rachel", "Judy", "James", "Oloo")
english <- c("70", "50e", "19c", "38^", "33^")
math <- c("65", "25c", "68", "32^", "50")
science <- c("45", "50", "25c", "27^", "72")
social <- c("56", "76", "42", "23^", "68")
comment <- c("Pass", "Supplementary amp; Special", "Special", "Discontinued", "Supplementary")
marks_1 <- data.frame(name, english, math, science, social, comment)
marks_1
Еще раз обратите внимание:
Pass
: Где у студента НЕТ e
или ^
после отметок, означающих, что все баллы равны 40 и более.
Supplementary
: Где у студента есть a ^
или an e
. ^
Средний балл меньше 40. У студентов e
может быть более 40 баллов, но они все еще не смогли пройти непрерывную оценку.
special
: У студента есть c
, но НЕТ e
или ^
.
Supplementary and special
: Сочетание дополнительного и специального. Это означает , что у студента есть e
^
или и то, и другое, и в то же время есть c
.
Discontinued
: У студента есть 4 или более e
, 4 или более ^
. Также у студента может быть комбинация e
, и ^
это происходит 4 или более раз.
Комментарии:
1. Когда студент получает «Особую» ценность ? Когда это «прекращено» ? Как выглядит строка 5
Supplementary
, но строка 2Supplementary amp; Special
?2. Ронак, Спасибо. Особое — там, где есть
c
. Дополнительный — когда есть^
илиe
. Прекращено: Если по 4 или более предметам студент получает менее 40 баллов или 4e
или 4^
балла . Пройдите там, где у студента нетc
,e
, и^
, что означает, что все предметы имеют более 40 баллов и более. Строка 5 является дополнительной, потому что у студента 33^. Строка 2 является дополнительной и специальной, потому что у ученика естьe
оценки иc
после них. Может быть, я плохо это объясняю.3.
Pass
: Если у студента НЕТe
или^
, все баллы равны 40 и более.Supplementary
: Где у студента есть a^
или ane
.^
Средний балл меньше 40. У студентовe
может быть более 40 баллов, но они все еще не смогли пройти непрерывную оценку.special
: У студента естьc
, но НЕТe
или^
.Supplementary and special
: Сочетание дополнительного и специального. Это означает , что у студента естьe
^
или и то, и другое, и в то же время естьc
.Discontinued
: У студента есть 4 или болееe
, 4 или более^
ИЛИ комбинацияe
, и^
это происходит 4 или более раз.
Ответ №1:
Я думаю, что вам нужно записать каждое правило вручную и применить их для каждой строки.
library(dplyr)
apply_rules <- function(x) {
e_rule <- any(grepl('e', x, fixed = TRUE))
c_rule <- any(grepl('c', x, fixed = TRUE))
fail_rule <- any(grepl('^', x, fixed = TRUE))
case_when(all(grepl('[\^e]', x)) ~ 'Discontinued',
(e_rule || fail_rule) amp;amp; c_rule ~ 'Supplementary amp; Special',
fail_rule || e_rule ~ 'Supplementary',
c_rule amp;amp; (c_rule || fail_rule) ~ 'Special',
!(e_rule || c_rule) ~ 'Pass',
fail_rule ~ 'Discontinued'
)
}
marks %>%
rowwise() %>%
mutate(comment = apply_rules(c_across(english:social)))
# name english math science social comment
# <chr> <chr> <chr> <chr> <chr> <chr>
#1 John 70 65 45 56 Pass
#2 Rachel 50e 25c 50 76 Supplementary amp; Special
#3 Judy 19c 68 25c 42 Special
#4 James 38^ 32^ 27^ 23^ Discontinued
#5 Oloo 33^ 50 72 68 Supplementary