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

时间:2018-02-19 23:38:18

标签: r sapply

我正在使用R来尝试为评估创建响应频率表。我有两个数据框:一个带有评估密钥,另一个带有学生回复。

到目前为止,我已经创建了一个新的数据框,其中包含每个学生回答的计数(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()类别的函数让我循环。

1 个答案:

答案 0 :(得分:0)

我不知道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

并假设对question1和question2的正确答案为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"

编辑SHORTER版本:

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

产生

[1] 1 2