Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据分类值制作类似行的热图_R_Plot_Social Networking_Heatmap_Correlation - Fatal编程技术网

R 根据分类值制作类似行的热图

R 根据分类值制作类似行的热图,r,plot,social-networking,heatmap,correlation,R,Plot,Social Networking,Heatmap,Correlation,在这个简单的例子中,我试图看到同一个班级的学生人数。这就是我想到的,但我想知道如何在没有循环的情况下做到这一点,以及如何显示哪些学生(或位置P1、P2、P3、P4)共享一个班级。如果这些都是数字,我想这将通过一个简单的相关矩阵来完成,但是考虑到分类的性质,我不知道除了这个以外该怎么做 DF <- (data.frame(row.names= c("ClassA", "ClassB","ClassC","ClassD","ClassE","ClassF"),

在这个简单的例子中,我试图看到同一个班级的学生人数。这就是我想到的,但我想知道如何在没有循环的情况下做到这一点,以及如何显示哪些学生(或位置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
DF试试这个:

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
DF2