R语言中数据框的操作除了单表操作、双表操作以外,还有一个非常重要的操作是表格重塑,它的作用更为实际,因为在我们处理真实数据的时候,往往需要通过重塑表格来对收集到的数据集进行一个预处理。
数据集的预处理主要分为两类:
在R中可以使用tidyr
包完成以上操作。
示例数据:
df = data.frame(sample = rep(c('s1','s2'),each = 4),
gene = rep(c('g1','g2','g3','g4'),2),
expr = 1:8)
df
## sample gene expr
## 1 s1 g1 1
## 2 s1 g2 2
## 3 s1 g3 3
## 4 s1 g4 4
## 5 s2 g1 5
## 6 s2 g2 6
## 7 s2 g3 7
## 8 s2 g4 8
spread()
函数将长型数据集变为宽型数据集
library(tidyr)
df1 = spread(data = df, gene, expr)
df1
## sample g1 g2 g3 g4
## 1 s1 1 2 3 4
## 2 s2 5 6 7 8
gather()
函数将宽型数据集变为长型数据集
df2 = gather(df1,g1:g4,key = 'gene',value = 'expr')
df2
## sample gene expr
## 1 s1 g1 1
## 2 s2 g1 5
## 3 s1 g2 2
## 4 s2 g2 6
## 5 s1 g3 3
## 6 s2 g3 7
## 7 s1 g4 4
## 8 s2 g4 8
示例数据:
data = data.frame(sample = rep(c('s1','s2'),each = 4),
gene_type_expr = paste(rep(c('g1_fpkm','g2_fpkm','g3_fpkm','g4_fpkm'),2),
expr = 1:8,
sep = '_'))
data
## sample gene_type_expr
## 1 s1 g1_fpkm_1
## 2 s1 g2_fpkm_2
## 3 s1 g3_fpkm_3
## 4 s1 g4_fpkm_4
## 5 s2 g1_fpkm_5
## 6 s2 g2_fpkm_6
## 7 s2 g3_fpkm_7
## 8 s2 g4_fpkm_8
separate()
函数将一列中每个单元格分为多列
data1 = separate(data,gene_type_expr,sep = '_',into = c('gene','type','expr'))
data1
## sample gene type expr
## 1 s1 g1 fpkm 1
## 2 s1 g2 fpkm 2
## 3 s1 g3 fpkm 3
## 4 s1 g4 fpkm 4
## 5 s2 g1 fpkm 5
## 6 s2 g2 fpkm 6
## 7 s2 g3 fpkm 7
## 8 s2 g4 fpkm 8
separate_rows()
函数将一列中的每个单元格分为多行
data2 = separate_rows(data,gene_type_expr,sep = '_')
head(data2)
## sample gene_type_expr
## 1 s1 g1
## 2 s1 fpkm
## 3 s1 1
## 4 s1 g2
## 5 s1 fpkm
## 6 s1 2
unite()
函数合并多个列中的单元格以形成单列
data3 = unite(data1,gene:expr,col = gene_type_expr) # 默认以“_”连接
data3
## sample gene_type_expr
## 1 s1 g1_fpkm_1
## 2 s1 g2_fpkm_2
## 3 s1 g3_fpkm_3
## 4 s1 g4_fpkm_4
## 5 s2 g1_fpkm_5
## 6 s2 g2_fpkm_6
## 7 s2 g3_fpkm_7
## 8 s2 g4_fpkm_8