根据分类值制作相似行的热图
Making a heatmap of similar rows based on categorical values
在这个简单的示例中,我试图查看共享相同 class 的学生人数。这是我想出的,但我想知道如何在没有循环的情况下做到这一点,以及可能如何显示哪些学生(或位置 P1、P2、P3、P4)一起共享 class。如果这些是数字,我认为它可以简单地通过相关矩阵来完成,但考虑到分类性质,我不确定除此之外如何处理它。
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
试试这个:
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
在这个简单的示例中,我试图查看共享相同 class 的学生人数。这是我想出的,但我想知道如何在没有循环的情况下做到这一点,以及可能如何显示哪些学生(或位置 P1、P2、P3、P4)一起共享 class。如果这些是数字,我认为它可以简单地通过相关矩阵来完成,但考虑到分类性质,我不确定除此之外如何处理它。
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
试试这个:
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