如何解决在 R heatmaply() 中出现的“Factor level duplicated”错误?

3
我正在尝试基于该矩阵制作一个热力图:
  1     2     3     4     5     6     7
C  6211  7608  8089 10514  7363  5375  7268
L  2459  2904  2573  3049  2221  1652  2311
N  3173  4213  3025  4324  2864  1524  2363
S    37    74   141    94    68    48    88
W  1223  1259   914  1691   874   607   912

我是这样做的:

排版内容:

c1 <- table(kat_data$delay_code, kat_data$DayOfWeek)
c1 <- as.matrix(c1)
c1

现在我正在尝试使用heatmaply()制作热图,但出现了错误:

Error in levels<-(tmp,value = as.character(levels)):因子水平[6]重复

以下是部分热图代码:

p<-heatmaply(c1, 
             dendogram = "none", 
             xlab = "", ylab = "", 
             main = "",
             scale = "column", 
             margins =c(60,100,40,20),............

我该怎么做才能让它工作?我读了很多关于那个错误的问题,并且我看到我需要提供独特的数据,但是我不知道在哪里和如何做到这一点。 您能帮助我吗?

1个回答

3
我们可以将其转换为data.frame,这样错误就会消失,因为出现了重复的行名,在data.frame中不允许。
library(heatmaply)
heatmaply(as.data.frame.matrix(table(mtcars[c('cyl', 'vs')])))

enter image description here

另外值得一提的是,使用as.matrix函数包装后,table类仍然保留。

m1 <- as.matrix(table(mtcars[c('cyl', 'vs')]))
str(m1)
# 'table' int [1:3, 1:2] 1 3 14 10 4 0
# - attr(*, "dimnames")=List of 2
#  ..$ cyl: chr [1:3] "4" "6" "8"
#  ..$ vs : chr [1:2] "0" "1"

这正是问题所在,因为?heatmaply建议 'x' 应该是什么。

x- 可以是 heatmapr 对象或数字矩阵,默认为TRUE,除非 x 包含任何缺失值(NAs)。

因此,我们可以将class转换为matrix

class(m1) <- "matrix"

现在,它应该可以正常工作了。
heatmaply(m1)

请注意,tablematrix对象可能会导致类似于OP帖子中的错误。
heatmaply(table(mtcars[c('cyl', 'vs')]))

levels<-(*tmp*,value = as.character(levels))中出错: 因为有重复的因子水平[4]

heatmaply(as.matrix(table(mtcars[c('cyl', 'vs')])))

levels<-(*tmp*, value = as.character(levels)) 出错:第4个因子级别重复。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接