语言环境:R version 4.0.3
IDE:Pycharm
作图:Windows Excel
咋一看,好像不太理解什么是数据融合和重构。其实不仅在科研上,我们在日常工作中也无时无刻地都在接触数据整理,分析。现在我们从一个小例子出发,对数据融合与重构做一个全面解释。
图1 财务报表
一、概念引入
数据融合(melt)可以使得每一行都是唯一的标识符-变量组合。
数据重构(dcast)可以将融合后的数据重新构建自己想要的组合,包括函数计算。
二、数据融合
我所在实验室是从事小麦抗叶锈病基因定位、克隆与机理分析。下面从一个简单小实验就上述概念进行解释。注:数据已脱敏。
- 材料与方法
- 材料:抗病品种Sample,感病品种(对照)Control
- 方法:2种处理,2次重复(生物学实验常3-4次重复)
表1 实验数据
- 数据说明
- Treatment列:处理1和处理2
- Rep.列:重复1,重复2
- Sample列:抗病品种每次取样数据
- Control列:感病品种(对照)每次取样数据
- 融合操作
- 需求:将表1数据集整理成每行为单一的标识符-变量组合,即每个处理,重复,样品对应观测值。(表2)
表2 数据融合
- 实现:使用R语言reshape2包
图2 R语言
reshape2包是reshape包的升级版,功能更加强大。它是一套重构和融合数据集的万能工具。它并未包含在R的标准安装中,所以在使用时需要进行安装。
- 首先安装reshape2包并构建原始数据框,R脚本如下
install.packages("reshape2")
library(reshape2)
Treatment <- c(1,1,2,2)
Rep. <- c(1,2,1,2)
Sample <- c(8,7,2,2)
Control <- c(9,8,3,2)
mydata <- data.frame(Treatment,Rep.,Sample,Control)
Treatment Rep. Sample Control
1 1 8 9
1 2 7 8
2 1 2 3
2 2 2 2
- 重构原始数据mydata并赋值与新变量mydata2
mydata2 <- melt(mydata,id=c("Treatment","Rep."))
Treatment Rep. variable value
1 1 Sample 8
1 2 Sample 7
2 1 Sample 2
2 2 Sample 2
1 1 Control 9
1 2 Control 8
2 1 Control 3
2 2 Control 2
需要注意的是,重构时必须要指定每个测量所需的变量(Treatment,Rep.),表1中的变量名的变量(Sample,Control)由程序自动创建。对应列(variable,value)。
三、数据重构(重铸)
dcas()函数能够读取已经融合的数据,并根据提供的公式和函数将其进行重塑。调用格式如下:
newdata <- dcast(mydata2, formula, fun.aggregate)
代码说明:
mydata2为已融合数据,formula描述想要的最后结果,fun.aggregate(可选)为数据整合函数。
执行整合:
- 重构1
获取不同处理间抗病样品和感病对照观测值的平均值。
表3 重构1
newdata <- dcast(mydata2,Treatment~variable,mean)
Treatment Sample Control
1 7.5 8.5
2 2.0 2.5
- 重构2
获取不同重复间抗病样品和感病对照观测值的平均值。
表4 重构2
newdata <- dcast(mydata2,Rep.~variable,mean)
Rep. Sample Control
1 5.0 6
2 4.5 5
不执行整合:
- 重构3
进行数据调整
表5 重构3
newdata <- dcast(mydata2,Treatment+variable~Rep.)
Treatment variable 1 2
1 Sample 8 7
1 Control 9 8
2 Sample 2 2
2 Control 3 2
- 重构4
进行数据调整
表6 重构4
newdata <- dcast(mydata2,Treatment~variable+Rep.)
Treatment Sample_1 Sample_2 Control_1 Control_2
1 8 7 9 8
2 2 2 3 2
四、小结
因为重构1-2中指定了 mean 作为整合函数,所以对数据进行了重塑与整合。很多情况下,我们不得不在数据分析之前对其进行重塑或整合,那么这时候melt()和dcast()函数便推荐使用。
图3 数据表格