Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
格式化考试结果以在R中执行t检验_R_Dataframe_Format_T Test - Fatal编程技术网

格式化考试结果以在R中执行t检验

格式化考试结果以在R中执行t检验,r,dataframe,format,t-test,R,Dataframe,Format,T Test,问题概述:我有一个包含15个问题的教学前和教学后考试结果的数据集。我希望对结果进行t检验,以比较总体平均值,但很难正确格式化数据集。数据集的示例部分如下所示: 然后,除了比较每个问题的前后分数之间的差异外,我还想运行一个比较前后平均值的t检验,但是,我需要用NA省略任何数据点。目前,我的方法不适用于任何NA值,因此将它们替换为零。是否有任何方法可以运行这些测试并简单地忽略NA值?谢谢大家! 所需输出: 1Pre 1Post 2Pre 2Post 3Pre

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

然后,除了比较每个问题的前后分数之间的差异外,我还想运行一个比较前后平均值的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        
1Pre 1Post 2Pre 2Post 3Pre 3Post
纠正B
1                1    1        0    0         0    1        
2                0    1        0    0         0    1        
3.
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        

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

na.action=na.omit

比如:

with(qDat, t.test(`1Pre`, `1Post`, na.action = na.omit))
那么这个呢:

重写您的循环-无需担心
NA
s,因为您将它们视为
0
,我们只需测试结果,然后将
NA
s设置为
FALSE

test <- qDat == correctAns # or correctAns[1] depending on your needs
test[is.na(test)] <- FALSE
storage.mode(test) <- "integer"
test
#      X1 X2 X3 X4 X5 X6 X7 X8
# [1,]  0  1  0  0  1  0  1  0
# [2,]  0  0  1  0  0  0  0  0
# [3,]  0  1  0  0  1  0  0  0
# [4,]  0  0  1  0  0  0  0  0
# [5,]  1  0  0  0  0  0  1  0
# [6,]  0  0  1  1  1  1  1  0
# [7,]  0  0  0  1  0  0  1  0
# [8,]  0  0  0  0  0  0  0  1

测试谢谢!这解决了问题的后半部分。现在的问题是将A、B、C、D字符转换为0和1,前提是它们与正确的答案值匹配,而不会丢失NA值。你有什么建议吗?干杯@ZachEisner,您只需要删除
test[is.na(test)]谢谢!实现第一行代码时,我得到的错误
“==”仅针对大小相同的数据帧定义。作为参考,correctAns是一个长度为30(30个问题)的向量,qDat是一个尺寸为106x30(106名参与者,30个问题)的数据框架@ZachEisner我用您指定的尺寸复制了它,它仍然有效-请参见编辑。您确定
qDat
不是
30乘106
吗?
t(qDat)=纠正措施是否有效?
with(qDat, t.test(`1Pre`, `1Post`, na.action = na.omit))
test <- qDat == correctAns # or correctAns[1] depending on your needs
test[is.na(test)] <- FALSE
storage.mode(test) <- "integer"
test
#      X1 X2 X3 X4 X5 X6 X7 X8
# [1,]  0  1  0  0  1  0  1  0
# [2,]  0  0  1  0  0  0  0  0
# [3,]  0  1  0  0  1  0  0  0
# [4,]  0  0  1  0  0  0  0  0
# [5,]  1  0  0  0  0  0  1  0
# [6,]  0  0  1  1  1  1  1  0
# [7,]  0  0  0  1  0  0  1  0
# [8,]  0  0  0  0  0  0  0  1
set.seed(123)
correctAns <- sample(LETTERS[1:3], 8, replace = TRUE) 
correctAns
# [1] "A" "C" "B" "C" "C" "A" "B" "C"
qDat <- sample(c(LETTERS[1:3], NA_character_), 8*2*4, replace = TRUE)
qDat <- data.frame(matrix(qDat, 8, 4*2), stringsAsFactors = FALSE)
qDat
  #     X1   X2   X3   X4 X5   X6   X7   X8
  # 1    C    A    C    C  A    B    A <NA>
  # 2    B    A    C <NA>  B <NA> <NA>    B
  # 3 <NA>    B    C    A  B    A <NA> <NA>
  # 4    B <NA>    C    B  B    B    B <NA>
  # 5    C <NA>    B <NA>  A <NA>    C <NA>
  # 6    C    C    A    A  A    A    A    B
  # 7    A    C <NA>    B  A    C    B <NA>
  # 8 <NA> <NA> <NA>    A  B    A    B    C
set.seed(123)
#  correctAns is a vector of length 30
correctAns <- sample(LETTERS[1:3], 30, replace = TRUE) 
length(correctAns)
# [1] 30
# qDat is a dataframe of dimensions 106x30 
qDat <- sample(c(LETTERS[1:3], NA_character_), 106*30, replace = TRUE)
qDat <- data.frame(matrix(qDat, 106, 30), stringsAsFactors = FALSE)
dim(qDat)
# [1] 106  30

# still works
test <- qDat == correctAns
test[is.na(test)] <- FALSE
storage.mode(test) <- "integer"
str(test)
# int [1:106, 1:30] 0 0 0 0 0 0 0 0 1 0 ...
# - attr(*, "dimnames")=List of 2
# ..$ : NULL
# ..$ : chr [1:30] "X1" "X2" "X3" "X4" ...