请问如何将第二列数据作为行分组的依据,做出这种图。
这是原代码
rm(list=ls())
library(pheatmap)
setwd("E:/software/R/heatmap")
dataset <- read.table('DXW.txt',header = TRUE, row.names = 1)
exp_ds = dataset[c(1:30),c(1:5)]
Group=c(rep('ori',1),
rep('R',4))
annotation_c <- data.frame(Group)
rownames(annotation_c) <- colnames(exp_ds)
pheatmap(exp_ds,
cluster_rows = T,
cluster_cols = F,
annotation_col =annotation_c,
annotation_legend=TRUE,
show_rownames = T,
show_colnames = T,
scale = "row",
color =colorRampPalette(c("#8854d0", "#ffffff","#fa8231"))(100)
)
【以下回答由 GPT 生成】
首先,你可以使用dplyr
包中的group_by
函数按照第二列进行分组。然后,根据分组情况,你可以使用split
函数将数据按照分组的结果进行分割,然后分别生成相应的热图。
下面是具体的解决方案:
library(pheatmap)
library(dplyr)
# 设置工作目录
setwd("E:/software/R/heatmap")
# 读取数据
dataset <- read.table('DXW.txt', header = TRUE, row.names = 1)
# 选择需要的列和行
exp_ds <- dataset[c(1:30), c(1:5)]
# 进行分组
exp_ds_grouped <- exp_ds %>% group_by(exp_ds[, 2])
# 获取分组的唯一值
group_values <- unique(dataset[, 2])
# 根据分组进行数据拆分和热图绘制
for (group in group_values) {
group_data <- exp_ds_grouped %>% filter(exp_ds_grouped[, 2] == group) %>% select(-exp_ds_grouped[, 2])
# 创建相应的注释数据集
annotation_c <- data.frame(Group = rep(group, ncol(group_data)))
rownames(annotation_c) <- colnames(group_data)
# 绘制热图
pheatmap(group_data,
cluster_rows = TRUE,
cluster_cols = FALSE,
annotation_col = annotation_c,
annotation_legend = TRUE,
show_rownames = TRUE,
show_colnames = TRUE,
scale = "row",
color = colorRampPalette(c("#8854d0", "#ffffff", "#fa8231"))(100)
)
}
通过上述代码,你可以根据第二列的不同值进行分组,并生成相应的热图。每个热图都有与分组对应的注释数据集。
【相关推荐】