使用 sapply() 确定 R 中正确响应的频率

Using sapply() to determine frequency of correct response in R

我正在使用 R 尝试为评估创建 table 响应频率。我有两个数据框:一个带有评估键,一个带有学生回答。

到目前为止,我已经创建了一个包含每个学生回答(a、b、c 等)计数的新数据框:

a_freq  <- sapply(responses, function(q) sum(q == "a")/length(q))
b_freq  <- sapply(responses, function(q) sum(q == "b")/length(q))
c_freq  <- sapply(responses, function(q) sum(q == "c")/length(q))
d_freq  <- sapply(responses, function(q) sum(q == "d")/length(q))
e_freq  <- sapply(responses, function(q) sum(q == "e")/length(q))
bl_freq <- sapply(responses, function(q) sum(q == "")/length(q))

response_freqs <- data.frame(rbind(a_freq, b_freq, c_freq, d_freq, e_freq, bl_freq))
colnames(response_freqs) <- responses_cols
rownames(response_freqs) <- c("a Freq", "b Freq", "c Freq", "d Freq", "e Freq", "Blank Freq")

responses 是我从中提取的数据框,每个学生一行,每列一个问题。现在,我试图找出一种方法来使用 sapply() 遍历相同的数据帧并拉出正确响应的频率——使用一个单独的向量,其中包含每个问题的正确字母。

我是 R 的新手,apply() 类的函数让我感到困惑。

我不知道responses长什么样,但假设它长得像

responses<-data.frame(question1=c("a","b","c","a"),question2=c("a","a","c","c"))

  question1 question2
1         a         a
2         b         a
3         c         c
4         a         c

并假设问题 1 和问题 2 的正确答案是 correctAnswers=c("b","c") 那么你可以定义下面的函数

frequencyCounter<-function(indexColumn){
    frequencyCorrectResponses<-sum(responses[,indexColumn]==correctAnswers[indexColumn])
    return(frequencyCorrectResponses)
}

然后是 sapply(c(1,2),frequencyCounter),结果是

[1] 1 2

因为question1只有一个正确答案"b",而question2有2个正确答案"c"


编辑较短的版本:

sapply(c(1,2),function(indexColumn) sum(responses[,indexColumn]==correctAnswers[indexColumn]))

产生

[1] 1 2