R语言生成热图:创建聚类数据框丢失原行名的问题及解决
R中保留聚类结果原行名的解决方法
你遇到的问题本质是base R的data.frame()不会自动将输入命名向量的名称设为数据框的行名——不管k取2还是4+,只是k=2时的ifelse操作可能让你误以为行名被保留了,实际是偶然情况。cutree()返回的是带原行名的命名向量,但用paste()生成新字符串向量后,直接传入data.frame()时,默认会生成数字序列的行名,覆盖了原有的名称。
以下是几种稳定保留原行名的解决方法:
- 方法1:创建数据框后手动赋值行名
# 生成聚类结果 hclust_col <- cutree(tree = as.dendrogram(hclust_cyto), k = 4) # 创建带聚类名称的数据框 hclust_col_1 <- data.frame(cluster = paste("cluster", hclust_col)) # 将原向量的名称设置为数据框行名 rownames(hclust_col_1) <- names(hclust_col)
- 方法2:创建数据框时直接指定行名参数
hclust_col <- cutree(tree = as.dendrogram(hclust_cyto), k = 4) hclust_col_1 <- data.frame( cluster = paste("cluster", hclust_col), row.names = names(hclust_col) )
- 方法3:tidyverse风格(需加载
tibble包)
如果你习惯用tidyverse工具链,可以更直观地处理行名:
library(tibble) hclust_col <- cutree(tree = as.dendrogram(hclust_cyto), k = 4) # 将命名向量转为带列名的数据框,处理聚类名称后再转回行名 hclust_col_1 <- enframe(hclust_col, name = "sample_id", value = "cluster") %>% mutate(cluster = paste("cluster", cluster)) %>% column_to_rownames(var = "sample_id")
内容的提问来源于stack exchange,提问作者Someone_1313
相关产品推荐
相关产品推荐

