前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >表达矩阵转换为数据框画图

表达矩阵转换为数据框画图

原创
作者头像
用户11064093
修改2024-04-18 19:12:16
710
修改2024-04-18 19:12:16

主要介绍使用pivot_longer进行长宽数据转换,这两个函数都是来自于tidyr

问题背景

现在有一个表达矩阵,要画箱线图

表达矩阵
表达矩阵
箱线图
箱线图

但是,上面表格不满足向ggplot2画箱线图的函数传递参数的需求,要变换成数据框把所有数字变成一列传递给y轴,怎么办?

首先行列转置

行列转置
行列转置

把原来的行名变成第一列

把原来的列名变成第二列

就变成数据框形式了。也就是把宽数据变成长数据。

代码如何实现?

先做个示例数据

代码语言:r
复制
# 表达矩阵
set.seed(10086) # 设置可重复随机数种子
exp = matrix(rnorm(18),ncol = 6)
exp = round(exp,2) # 保留两位小数
rownames(exp) = paste0("gene",1:3)
colnames(exp) = paste0("test",1:6)
exp[,1:3] = exp[,1:3]+1
exp
示例数据
示例数据
代码语言:r
复制
library(tidyr)
library(tibble)
library(dplyr)
dat = t(exp) %>% # 先转置
  as.data.frame() %>% # 变成数据框
  rownames_to_column() %>% # 行名变成一列
  mutate(group = rep(c("control","treat"),each = 3)) # 按test的分组新加一列分组,用于画图上不同颜色
dat
dat
代码语言:r
复制
pdat = dat%>% 
  pivot_longer(cols = starts_with("gene"), # gene开头的列
               names_to = "gene", # 列名归为gene列
               values_to = "count") # 数据归为count列

library(ggplot2)
p = ggplot(pdat,aes(gene,count))+
  geom_boxplot(aes(fill = group))+
  theme_bw()
p

按位置找要变形的行写成下面这样也是可以的

代码语言:r
复制
pdat = dat%>% 
  pivot_longer(cols = 2:4,
               names_to = "gene",
               values_to = "count")

生信技能树

注意:以下情况都可以解决

列名是字符型数据

列名中含有数值型数据,可以names_prefix/names_transform提取,可以用readr包中的parse_number()函数直接解析

列名中含有多个变量可以用正则表达式拆分成多列

一行有多个观测

列名有重复

详见使用pivot_longer和pivot_wider进行长宽数据转换-CSDN博客

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 主要介绍使用pivot_longer进行长宽数据转换,这两个函数都是来自于tidyr包
  • 问题背景
  • 但是,上面表格不满足向ggplot2画箱线图的函数传递参数的需求,要变换成数据框把所有数字变成一列传递给y轴,怎么办?
  • 代码如何实现?
    • 先做个示例数据
    • 注意:以下情况都可以解决
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com