我正在使用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()
类别的函数让我循环。
答案 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