繁体   English   中英

如何使用 tidyverse 从测试结果中计算百分比分数?

[英]How can I calculate the percentage score from test results using tidyverse?

我想计算正确回答问题的个人百分比,而不是计算每个人的分数。 下面是包含数据的小标题,列是候选人,ar,行是问题。 数据点是给出的答案,右侧名为“正确”的列显示正确答案。

A tibble: 20 x 19
   question   a     b     c     d     e     g     h     i     j     k     l     m     n     o     p     q     r     correct
   <chr>         <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct>  
 1 001        3     3     3     0     4     0     1     4     4     0     2     3     2     0     3     0     3     1      
 2 002        2     4     2     3     4     NA    4     2     2     2     4     2     4     3     2     2     3     2      
 3 003        2     2     2     3     4     2     2     4     4     1     4     3     3     2     4     1     3     2      
 4 005        2     3     1     3     4     NA    2     4     4     2     4     1     4     2     4     2     2     2      
 5 006        3     1     2     3     3     NA    2     3     4     2     3     3     3     3     3     NA    3     3      
 6 008        3     3     3     3     3     1     1     3     3     1     3     3     3     3     3     1     3     3      
 7 010        4     5     4     3     4     4     4     4     4     3     4     4     5     4     4     3     4     4      
 8 011        3     3     5     3     3     3     3     3     5     4     5     4     4     3     3     2     5     5      
 9 013        0     0     0     0     0     1     0     0     0     1     1     0     0     0     0     0     0     0      
10 014        0     0     0     2     0     1     0     0     0     0     2     0     2     0     0     0     0     0      
11 016        3     3     0     0     4     1     1     4     4     2     3     3     3     3     1     0     3     0      
12 017        0     0     0     0     0     1     0     0     0     0     1     0     0     0     0     0     0     0      
13 019        0     1     0     2     1     1     0     1     0     1     2     2     2     1     0     1     1     0      
14 020        0     0     0     0     0     0     0     0     0     0     1     3     0     0     0     0     0     0      
15 039        0     0     0     0     1     1     0     0     0     0     1     0     0     0     0     0     0     0      
16 041        0     0     0     0     0     1     0     0     0     0     1     0     0     0     0     1     0     0      
17 045        0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0      
18 047        0     0     0     0     0     NA    0     0     0     0     1     0     0     0     0     0     0     0      
19 049        3     3     3     3     4     NA    2     4     x     2     4     3     5     3     1     1     3     3      
20 050        0     3     3     0     1     NA    0     3     3     0     x     0     0     0     0     0     3     1   

我想生成一个“百分比”列,给出每个问题的正确答案比例。 我怀疑我必须进行循环或逐行操作,但我对此还不够深入,我只是不知道如何比较因素。 我已经尝试过mutate()if_else()group_by()等等,但还没有接近答案。

任何帮助将不胜感激。

您可以使用循环尝试此解决方案:

#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
}

Output:

   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替换以使循环正常工作。

如果您的 data.frame 被称为data ,您可以尝试

library(dplyr)
data %>% rowwise() %>%
    mutate(percentage = sum(c_across(a:r) == correct) / length(c_across(a:r)))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM