R语言将第二列作为行分组的依据

请问如何将第二列数据作为行分组的依据,做出这种图。
这是原代码

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) 
)

img

img

【以下回答由 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)
  )
}

通过上述代码,你可以根据第二列的不同值进行分组,并生成相应的热图。每个热图都有与分组对应的注释数据集。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^