pivot_longer
进行长宽数据转换,这两个函数都是来自于tidyr
包现在有一个表达矩阵,要画箱线图
首先行列转置
把原来的行名变成第一列
把原来的列名变成第二列
就变成数据框形式了。也就是把宽数据变成长数据。
# 表达矩阵
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
library(tidyr)
library(tibble)
library(dplyr)
dat = t(exp) %>% # 先转置
as.data.frame() %>% # 变成数据框
rownames_to_column() %>% # 行名变成一列
mutate(group = rep(c("control","treat"),each = 3)) # 按test的分组新加一列分组,用于画图上不同颜色
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
按位置找要变形的行写成下面这样也是可以的
pdat = dat%>%
pivot_longer(cols = 2:4,
names_to = "gene",
values_to = "count")
生信技能树
列名是字符型数据
列名中含有数值型数据,可以names_prefix/names_transform
提取,可以用readr
包中的parse_number()
函数直接解析
列名中含有多个变量可以用正则表达式拆分成多列
一行有多个观测
列名有重复
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。