语言环境: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 Control1189127821232222
- 重构原始数据mydata并赋值与新变量mydata2
mydata2 <- melt(mydata,id=c("Treatment","Rep."))Treatment Rep. variable value11Sample812Sample721Sample222Sample211Control912Control821Control322Control2
需要注意的是 , 重构时必须要指定每个测量所需的变量(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 Control17.58.522.02.5
- 重构2
表4 重构2
newdata <- dcast(mydata2,Rep.~variable,mean)Rep. Sample Control15.0624.55
不执行整合:
- 重构3
表5 重构3
newdata <- dcast(mydata2,Treatment variable~Rep.)Treatment variable 1 21Sample 8 71Control 9 82Sample 2 22Control 3 2
- 重构4
表6 重构4
newdata <- dcast(mydata2,Treatment~variable Rep.)Treatment Sample_1 Sample_2 Control_1 Control_21879822232
四、小结
因为重构1-2中指定了 mean 作为整合函数,所以对数据进行了重塑与整合 。很多情况下,我们不得不在数据分析之前对其进行重塑或整合 , 那么这时候melt()和dcast()函数便推荐使用 。【reshape2用得好,晚上下班回家早,试试万能数据处理包】图3 数据表格