首页 > 解决方案 > 格式化考试结果以在 R 中执行 t 检验

问题描述

问题概述:我有一个数据集,其中包含 15 个问题的教学前和教学后考试的结果。我希望对结果进行 t 检验以比较整体均值,但难以正确格式化数据集。下面给出了数据集的一个示例部分:

             1Pre  1Post   2Pre  2Post    3Pre  3Post    4Pre  4Post
Correct          B    B        A    A         B    B         C    C
1                B    B        C    D         C    B         C    C
2                C    B        B    D         C    B         C    A
3             <NA> <NA>     <NA> <NA>        <NA> <NA>       <NA> <NA>
4                B    B        B    A         B    B         C    C
5                B    B        B    A         B    B         C    C
6                C    B        D    A         A    D         C    B
7                C    C        D    D         E    E         C    C
8                C    A        B    B         A    A         <NA> <NA>

目标:我想将“正确”值与以下行中的值匹配给考生,这样 1 的值是正确的,而 0 的值是不正确的。我已经使用以下代码完成了这项工作:

for(j in 1:ncol(qDat)){
  for(i in 1:nrow(qDat)){
    if(qDat[i,j] == correctAns[1]){
      qDat[i,j]=1
    }else{
      qDat[i,j]=0
    }
  }
}

然后,除了比较每个问题的前后分数之间的差异之外,我还想运行一个比较前后均值的 t 检验,但是,我需要省略任何带有 NA 的数据点。目前,我的方法不适用于任何 NA 值,因此将它们替换为零。有什么方法可以运行这些测试并简单地省略 NA 值?谢谢!

所需的输出:

             1Pre  1Post   2Pre  2Post    3Pre  3Post    
Correct          B    B        A    A         B    B         
1                1    1        0    0         0    1        
2                0    1        0    0         0    1        
3             <NA> <NA>     <NA> <NA>        <NA> <NA>       
4                1    1        0    0         1    1        
5                1    1        0    0         1    1        
6                0    1        0    1         0    0        
7                0    0        0    0         0    0         
8                0    0        0    0         0    0        

标签: rdataframeformatt-test

解决方案


您可以尝试将以下参数传递给 t.test 调用:

na.action = na.omit

就像是:

with(qDat, t.test(`1Pre`, `1Post`, na.action = na.omit))

推荐阅读