我正在处理包含为学生(行)分配分数的评分者(列)的数据。数据的结构类似于:
rater.1 <-rep(seq(1:4),each=6)
rater.2 <- rep(seq(2:5), each=6)
rater.3 <- rep(seq(3:6), each=6)
rater.4 <- rep(seq(1:4), each=6)
rater.5 <- rep(seq(2:5), each=6)
rater.6 <- rep(seq(3:6), each=6)
ratings <- cbind(rater.1, rater.2, rater.3, rater.4, rater.5, rater.6)
我想应用一个函数来根据每对可能的评估者计算一个值。所以这个值将被计算出来(rater.1,rater.2),(rater.1,rater.3),(rater.1,rater.4),(rater.1,rater5),(rater.1, rater.6),(rater.2,rater.3),(rater.2,rater.4),...等。
对中评分者的顺序并不重要。
以下是使用函数计算一对中观察到的评级之和的简化示例:
pair.sum <- function(rater.i, rater.j){
pairsum.ij = sum(rater.1) + sum(rater.j)
return(pairsum.ij)
}
我想创建一个结果的向量,以某种方式标记为对中的raters的名称。我知道可能需要某种循环,但我不知道如何构造它以获得所有可能的对的结果。
实际数据包含更多列和行,功能更复杂。但我想从一个简单的例子开始,看看我是否可以弄清楚如何将其概括为实际数据。我是编程新手,非常感谢你的帮助!
答案 0 :(得分:1)
我认为这应该有效:
N <- ncol(ratings)
myfun <- function(i,j,data) {sum(data[,i],data[,j])}
vals <- Vectorize(myfun, vectorize.args=list("i","j"))
outer(1:N,1:N,vals,data=ratings)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 120 120 120 120 120 120
[2,] 120 120 120 120 120 120
[3,] 120 120 120 120 120 120
[4,] 120 120 120 120 120 120
[5,] 120 120 120 120 120 120
[6,] 120 120 120 120 120 120