我正在尝试计算一个需要三条信息的等式。
假设我有5个科目,每个科目回答3个问题,包括4个选项。
来自5个受试者的回答的数据集是a。
a<-as.data.frame(matrix(sample(c(1:4),15,replace=T),nrow=5))
colnames(a)<-c("a1","a2","a3")
> a
a1 a2 a3
1 2 1 2
2 1 4 4
3 1 1 1
4 3 4 1
5 2 2 3
每个问题的每个选项都有自己的价值。例如,第一个问题的第二个选项的值为.7319431。数据集是b。
b<-as.data.frame(matrix(runif(12,0,1),nrow=3))
colnames(b)<-c("b1","b2","b3","b4")
> b
b1 b2 b3 b4
1 0.83721477 0.7319431 0.5227578 0.9924321
2 0.02150756 0.7681706 0.8250167 0.1252194
3 0.27294672 0.8310693 0.9333875 0.8516141
此外,每个主题都有自己的价值。数据集是c。
c<-runif(5,0,1)
> c
[1] 0.9119466 0.9053619 0.5087231 0.2063420 0.1401520
在第一步,对于每个主题和每个问题,我需要将每个选项的每个值乘以每个主题的每个值,然后将它们相加以得到每个问题和每个主题的数字。我用下面的函数完成了这一步。
fun<-function(b,c){
bc1<-t(sapply(c, FUN=function(x) b[,1]*x))
bc2<-t(sapply(c, FUN=function(x) b[,2]*x))
bc3<-t(sapply(c, FUN=function(x) b[,3]*x))
bc4<-t(sapply(c, FUN=function(x) b[,4]*x))
sum<-bc1+bc2+bc3+bc4
}
但是作为下一步,我应该考虑第一个数据集a,这样乘法只发生在数据集中的响应情况,a。换句话说,在上面的例子中,对于第一个主题和第一个问题,我只需要将第一个问题(.7319431)的第二个选项的值乘以第一个主题(.9119466)的值。对于同一主题的第二个问题,我需要计算.02150756(第二个问题的第一个选项的值)* .9119466(第一个主题的值)。
我目前陷入了这一步。我尝试在这里应用if-else函数,但没有成功。如果有人能帮我这一步,我真的很感激。
答案 0 :(得分:0)
最简单的方法可能是融合所有数据帧,长格式&#34;然后加入他们:
#subject answers data
a<-as.data.frame(matrix(sample(c(1:4),15,replace=T),nrow=5))
colnames(a)<-paste0("question",1:3)
a$subject<-paste0("subject",1:5)
#melting the data
a=melt(a,measure.vars = c('question1',"question2","question3"),value.name = "chosen_answer",variable.name = "question")
#questions score data
b<-as.data.frame(matrix(runif(12,0,1),nrow=3))
colnames(b)<-1:4
b$question<-paste0("question",1:3)
b=melt(b,measure.vars=c("1","2","3","4"),value.name="question_score",variable.name="chosen_answer")
#joining questions score with subject answers
a=merge(a,b)
#subject score data
c<-data.frame(subject_score=runif(5,0,1),subject=paste0("subject",1:5))
a=merge(a,c)
a
subject question chosen_answer question_score subject_score
1 subject1 question1 4 0.8847954 0.5039638
2 subject1 question2 4 0.6780376 0.5039638
3 subject1 question3 4 0.3810658 0.5039638
4 subject2 question1 2 0.8054086 0.2152930
5 subject2 question2 4 0.6780376 0.2152930
6 subject2 question3 1 0.8296518 0.2152930
7 subject3 question1 4 0.8847954 0.5769765
8 subject3 question3 2 0.7000839 0.5769765
9 subject3 question2 3 0.5875164 0.5769765
10 subject4 question3 2 0.7000839 0.5738833
11 subject4 question1 2 0.8054086 0.5738833
12 subject4 question2 1 0.6064660 0.5738833
13 subject5 question2 3 0.5875164 0.1566587
14 subject5 question1 4 0.8847954 0.1566587
15 subject5 question3 4 0.3810658 0.1566587
之后,您可以使用该数据执行任何操作。
目前还不清楚你想要做什么。无论主题选择了什么选项,您的功能似乎都会按主题分数乘以问题分数。如果您提供预期输出的示例
,将会有所帮助