Как я могу рассчитать процентную оценку результатов тестирования с помощью tidyverse? - PullRequest
0 голосов
/ 05 августа 2020

Вместо того, чтобы подсчитывать баллы каждого человека, я хочу подсчитать процент людей, ответивших на вопрос правильно. Ниже находится таблица с данными, столбцы - кандидаты, ar, а строки - вопросы. Точки данных - это полученные ответы, а столбец справа с названием «правильный» показывает правильный ответ. ответы на каждый вопрос. Я подозреваю, что мне нужно выполнять циклы или построчные операции, но я так далеко от этого, что просто не могу понять, как сравнивать факторы. Я пробовал mutate(), if_else(), group_by() и многое другое, но так и не смог найти ответ.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Если ваш data.frame называется data, вы можете попробовать

library(dplyr)
data %>% rowwise() %>%
    mutate(percentage = sum(c_across(a:r) == correct) / length(c_across(a:r)))
0 голосов
/ 05 августа 2020

Вы можете попробовать это решение, используя al oop:

#Code
#First select the range of individuals a to r
index <- 2:18
#Create empty var to save results
df$Count <- NA
df$Prop <- NA
#Apply function
for(i in 1:dim(df)[1])
{
  x <- df[i,index]
  count <- length(which(x==df$correct[i]))
  percentage <- count/dim(x)[2]
  #Assign
  df$Count[i] <- count
  df$Prop[i] <- percentage
}

Вывод:

   question a b c d e  g h i  j k  l m n o p  q r correct Count       Prop
1         1 3 3 3 0 4  0 1 4  4 0  2 3 2 0 3  0 3       1     1 0.05882353
2         2 2 4 2 3 4 NA 4 2  2 2  4 2 4 3 2  2 3       2     8 0.47058824
3         3 2 2 2 3 4  2 2 4  4 1  4 3 3 2 4  1 3       2     6 0.35294118
4         5 2 3 1 3 4 NA 2 4  4 2  4 1 4 2 4  2 2       2     6 0.35294118
5         6 3 1 2 3 3 NA 2 3  4 2  3 3 3 3 3 NA 3       3    10 0.58823529
6         8 3 3 3 3 3  1 1 3  3 1  3 3 3 3 3  1 3       3    13 0.76470588
7        10 4 5 4 3 4  4 4 4  4 3  4 4 5 4 4  3 4       4    12 0.70588235
8        11 3 3 5 3 3  3 3 3  5 4  5 4 4 3 3  2 5       5     4 0.23529412
9        13 0 0 0 0 0  1 0 0  0 1  1 0 0 0 0  0 0       0    14 0.82352941
10       14 0 0 0 2 0  1 0 0  0 0  2 0 2 0 0  0 0       0    13 0.76470588
11       16 3 3 0 0 4  1 1 4  4 2  3 3 3 3 1  0 3       0     3 0.17647059
12       17 0 0 0 0 0  1 0 0  0 0  1 0 0 0 0  0 0       0    15 0.88235294
13       19 0 1 0 2 1  1 0 1  0 1  2 2 2 1 0  1 1       0     5 0.29411765
14       20 0 0 0 0 0  0 0 0  0 0  1 3 0 0 0  0 0       0    15 0.88235294
15       39 0 0 0 0 1  1 0 0  0 0  1 0 0 0 0  0 0       0    14 0.82352941
16       41 0 0 0 0 0  1 0 0  0 0  1 0 0 0 0  1 0       0    14 0.82352941
17       45 0 0 0 0 0  0 0 0  0 0  0 0 0 0 0  0 0       0    17 1.00000000
18       47 0 0 0 0 0 NA 0 0  0 0  1 0 0 0 0  0 0       0    15 0.88235294
19       49 3 3 3 3 4 NA 2 4 NA 2  4 3 5 3 1  1 3       3     7 0.41176471
20       50 0 3 3 0 1 NA 0 3  3 0 NA 0 0 0 0  0 3       1     1 0.05882353

У вас было несколько x в ответах, поэтому я заменил NA для того, чтобы l oop работал.

...