如何在R中转换data.frame为宽格式以制作热图?
R数据框重塑为热图格式的解决方案
原始数据结构
| V26 | V22 | n | |
|---|---|---|---|
| 1 | 40SRPS | 30 | 1 |
| 2 | A1.1-4 | 28 | 2 |
| 3 | A1.1-4 | 29 | 1 |
| 4 | A1.1-4 | 30 | 8 |
| 5 | A1.1-4 | 31 | 5 |
| 6 | AAO3 | 28 | 1 |
| 7 | AAO3 | 31 | 1 |
| 8 | ABCG41 | 28 | 11 |
| 9 | ABCG41 | 29 | 10 |
| 10 | ACA11 | 28 | 6 |
目标格式
| 28 | 29 | 30 | 31 | ||
|---|---|---|---|---|---|
| 1 | 40SRPS | 0 | 0 | 1 | 0 |
| 2 | A1.1-4 | 2 | 1 | 8 | 5 |
| 3 | AAO3 | 1 | 0 | 0 | 1 |
| 4 | ABCG41 | 11 | 10 | 0 | 0 |
| 5 | ACA11 | 6 | 0 | 0 | 0 |
解决方案
方法1:使用tidyverse的pivot_wider(推荐,语法直观)
先加载tidyverse包,通过pivot_wider将长格式转宽格式,同时填充缺失值为0:
# 加载包 library(tidyverse) # 假设你的数据框名为df df_wide <- df %>% pivot_wider( id_cols = V26, # 作为行标识的列 names_from = V22, # 转为列名的列 values_from = n, # 填充到单元格的值 values_fill = 0 # 缺失值填充为0 )
方法2:使用基础R的reshape函数(无需额外安装包)
如果不想加载第三方包,可用基础R原生函数实现:
# 假设你的数据框名为df df_wide <- reshape( df, idvar = "V26", timevar = "V22", direction = "wide", v.names = "n" ) # 移除列名中的"n."前缀 colnames(df_wide) <- gsub("n\\.", "", colnames(df_wide)) # 将NA替换为0 df_wide[is.na(df_wide)] <- 0
两种方法均可高效处理数百行数据,生成热图所需的宽格式结构。
内容的提问来源于stack exchange,提问作者Wenjia Gu
相关产品推荐
相关产品推荐

