2012-02-19 2 views
4

여러 개의 (2 진) 기준으로 비디오 클립 집합을 판단하는 두 명의 평가자의 데이터 세트가 있습니다. 나는 그들의 동의/불일치를 더 잘 이해하기 위해 혼란 행렬을 계획하고 싶습니다. 그러나 지금까지 발견 한 모든 사례는 각 판사가 클립 당 하나의 기준만을 평가하는 경우를위한 것입니다. 제 경우에는 심사 위원이 각 클립에 대한 모든 기준을 평가합니다.R에서 여러 판단을 포함하는 혼란 행렬을 만드는 방법?

str (mydata) 
'data.frame': 160 obs. of 6 variables: 
$ A_Con: int 0 0 0 0 0 0 0 0 0 0 ... 
$ A_Dom: int 0 0 0 1 0 0 0 0 0 0 ... 
$ A_Met: int 0 0 0 0 0 0 1 0 0 1 ... 
$ A_Mod: int 0 0 0 1 0 1 0 0 0 1 ... 
$ Rater: Factor w/ 2 levels "A","B": 2 2 2 2 2 2 2 2 2 2 ... 
$ Clip : int 1 2 3 4 5 6 7 8 9 10 ... 

I이 용융 수

는 I (이 경우 80) 비디오 클립 세트 두 평가자 (A 및 B)에 의해 판단 4 개 진 기준 (A_Con..A_Mod)을 가지고 말 로 :

> str(mymolten) 
'data.frame': 640 obs. of 4 variables: 
$ Rater : Factor w/ 2 levels "A","B": 2 2 2 2 2 2 2 2 2 2 ... 
$ Clip : int 1 2 3 4 5 6 7 8 9 10 ... 
$ variable: Factor w/ 4 levels "A_Con","A_Dom",..: 1 1 1 1 1 1 1 1 1 1 ... 
$ value : int 0 0 0 0 0 0 0 0 0 0 ... 

하지만 (이 거의 너무 완벽있는) 조합을 계산 것이라고 혼동 행렬로 캐스팅하는 방법을 알아낼 수 없습니다

     Rater B 
       A_Con A_Dom A_Met A_Mod 
     A_Con 19  1  0  0 
Rater A A_Dom 1  20  0  0 
     A_Met 0  0  20  5 
     A_Mod 0  2  0  20 

테이블() 함수가 이동하는 방법처럼 보이지만 데이터를 포맷하는 방법은 무엇입니까?

답변

3

이것은 가장 간단한 해결책이 아닐 수 있습니다. 두 명의 평가자, 즉 및 merge의 결과 데이터를 분리 할 수 ​​있습니다.

# Sample data 
n <- 80 
d0 <- data.frame(
    A_Con = round(runif(2*n)), 
    A_Dom = round(runif(2*n)), 
    A_Met = round(runif(2*n)), 
    A_Mod = round(runif(2*n)), 
    Rater = rep(c("A","B"), n), 
    Clip = rep(1:n,each=2) 
) 

library(reshape2) 
library(plyr) 
d <- melt(d0, id.vars=c("Rater","Clip")) 
d <- d[ d$value==1, ] 
A <- d[d$Rater=="A",] 
B <- d[d$Rater=="B",] 
A <- data.frame(Clip=A$Clip, A=A$variable) 
B <- data.frame(Clip=B$Clip, B=B$variable) 
d <- merge(A, B, all=FALSE) 
d <- ddply(d, c("A", "B"), summarize, n=length(Clip)) 
dcast(d, A ~ B) 
+0

고마워요! 하나의 평가자가 특정 기준을 사용하지 않으면 혼란 행렬에 열이 누락되는 것이 유일한 경우입니다. ddply 호출을 d <- ddply (d, c ("A", "B"), 요약, n = 길이 (클립), .drop = FALSE)로 변경하여 수정할 수 있습니다. – anthill

관련 문제