如何修复R heatmaply()中的“因子级重复”错误?

时间:2019-11-18 19:58:23

标签: r heatmap levels

我正在尝试根据该矩阵制作热图:

  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()制作热图,但出现错误:

  

级别错误<-( tmp `,值= as.character(levels)):重复了因子级别[6]

下面的热图代码的一部分:

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

我应该怎么做才能使其正常工作?我读到了很多有关该错误的问题,并且看到需要提供唯一的数据,但是我不知道在哪里以及如何执行此操作。 你能帮我吗?

1 个答案:

答案 0 :(得分:1)

我们可以将其转换为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对象,也可以是数值矩阵,除非x包含任何NA,否则默认为TRUE。

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

class(m1) <- "matrix"

现在,它应该可以工作了

heatmaply(m1)

请注意,tablematrix对象可能会导致与OP帖子中类似的错误

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

levels<-*tmp*中的错误,值= as.character(levels)):         因素水平[4]已重复

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

levels<-*tmp*中的错误,值= as.character(levels)):         因素水平[4]已重复