R-数据科学(六):数据框-表格重塑

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

本博客内容将同步更新到个人微信公众号生信玩家。欢迎大家关注~~~
R-数据科学(六):数据框-表格重塑_第1张图片

你可能感兴趣的:(R-数据科学)