使用 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
我正在使用 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