R 根据分类值制作类似行的热图
在这个简单的例子中,我试图看到同一个班级的学生人数。这就是我想到的,但我想知道如何在没有循环的情况下做到这一点,以及如何显示哪些学生(或位置P1、P2、P3、P4)共享一个班级。如果这些都是数字,我想这将通过一个简单的相关矩阵来完成,但是考虑到分类的性质,我不知道除了这个以外该怎么做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"),
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