2017-06-27 5 views
2

この簡単な例では、同じクラスを共有する学生の数を確認しようとしています。これは私が思いついたものですが、私はどのようにループなしでこれを行うのか、潜在的にどの学生(またはP1、P2、P3、P4の位置)がクラスを共有するかを示す方法を知りたいと思います。これらが数字であれば、それは単に相関行列を使って行われると思いますが、カテゴリ別の性質を考えると、これ以外の方法についてはわかりません。類似の列のヒートマップをカテゴリ値に基づいて作成する

DF <- (data.frame(row.names= c("ClassA", "ClassB","ClassC","ClassD","ClassE","ClassF"), 
       P1=c("John","John","Dave","Patrick","Steve","John"), 
       P2=c("Jim","Jim","Robert","Matt","Jim","Ben"), 
       P3=c("Marty","Mike","Stu","Geoff","Mike","Leif"), 
       P4=c("Mark","Mark","Tim","Moby","Chester","Larry"))) 


DFtally <- matrix(ncol=6, nrow=6) 
for (i in 1:dim(DF)[1]) { 
    for (j in 1:dim(DF)[1]) { 
    DFtally[i,j] <- length(intersect(t(DF[i,]),t(DF[j,]))) 
    } 
} 

library(plotly) 
p <- plot_ly(z = DFtally, type = "heatmap") 
p 

enter image description here

答えて

1

これを試してみてください:

DF2 <- split(as.matrix(DF), 1:nrow(DF)) 
DF2 <- crossprod(table(stack(DF2))) 
DF2 

#  ind 
# ind 1 2 3 4 5 6 
#  1 4 3 0 0 1 1 
#  2 3 4 0 0 2 1 
#  3 0 0 4 0 0 0 
#  4 0 0 0 4 0 0 
#  5 1 2 0 0 4 0 
#  6 1 1 0 0 0 4 
関連する問題