R: R Скрипт, который рассчитывает средний балл студента по буквенным оценкам - PullRequest
1 голос
/ 03 апреля 2020

Мне нужна помощь в составлении R-скрипта, который вычисляет средний балл по множеству студентов (обозначается идентификатором образца) в наборе данных. Средний балл должен быть рассчитан по стандартной 4-балльной шкале (A = 4, B = 3, C = 2, D = 1 и F = 0). Если учащийся не имеет назначенной оценки, задание не засчитывается в средний средний балл.

Вот примерный набор данных:

df <- data.frame(sampleid = c(1, 2, 3, 4, 5, 6, 7), HW1 = c("A","","B","F","B","A","C"), HW2 = c("A","A","C","","A","D",""), Exam = c("A","A","A","A","A","D","B"))

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Мы можем создать именованный вектор для изменения значений и затем взять среднее значение с помощью rowMeans

nm1 <- setNames(4:0, c('A', 'B', 'C', 'D', 'F'))
rowMeans( `dim<-`(nm1[as.matrix(df[-1])], dim(df[-1])), na.rm = TRUE)
#[1] 4.000000 4.000000 3.000000 2.000000 3.666667 2.000000 2.500000
0 голосов
/ 05 апреля 2020

Я сделал несколько предположений о том, как обрабатывать пропуски (игнорировать при вычислении среднего значения) и баллах (является ли E возможной оценкой?).

Код намного длиннее относительно Акруна, хотя я Сделайте это шаг за шагом, отправив результаты на экран, чтобы было понятно, что происходит.

library(tidyverse)

df <- data.frame(sampleid = c(1, 2, 3, 4, 5, 6, 7), HW1 = c("A","","B","F","B","A","C"), HW2 = c("A","A","C","","A","D",""), Exam = c("A","A","A","A","A","D","B"))
df

#Pivot data into long format
df_long <- df %>% pivot_longer(-1,"assessment")
df_long

#Make blank "" into NA so they will be ignored in mean calculation, and make "value" type character
df_long$value <- df_long$value %>% na_if("")
df_long$value <- as.character(df_long$value)
df_long

#make df_key of grades and their scores, "value" is a character to match df_long
df_key <- tibble(
  "value" = c("A", "B", "C", "D", "E", "F"),  
  "mark" = c(4,3,2,1,0,0))
df_key

#Join df_key to df
df_long <- full_join(df_long, df_key)
df_long

#Calculate mean by group (student)
results <- df_long %>% group_by(sampleid) %>% summarise(mean_grade=mean(mark, na.rm = TRUE))
results
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...