reshape2用得好,晚上下班回家早,试试万能数据处理包

语言环境:R version 4.0.3
IDE:Pycharm
作图:Windows Excel
咋一看,好像不太理解什么是数据融合和重构 。其实不仅在科研上,我们在日常工作中也无时无刻地都在接触数据整理,分析 。现在我们从一个小例子出发,对数据融合与重构做一个全面解释 。

reshape2用得好,晚上下班回家早,试试万能数据处理包

图1 财务报表

一、概念引入

数据融合(melt)可以使得每一行都是唯一的标识符-变量组合 。
数据重构(dcast)可以将融合后的数据重新构建自己想要的组合,包括函数计算 。

二、数据融合

我所在实验室是从事小麦抗叶锈病基因定位、克隆与机理分析 。下面从一个简单小实验就上述概念进行解释 。注:数据已脱敏 。
  • 材料与方法
    • 材料:抗病品种Sample,感病品种(对照)Control
    • 方法:2种处理,2次重复(生物学实验常3-4次重复)

reshape2用得好,晚上下班回家早,试试万能数据处理包

表1 实验数据
  • 数据说明
    • Treatment列:处理1和处理2
    • Rep.列:重复1 , 重复2
    • Sample列:抗病品种每次取样数据
    • Control列:感病品种(对照)每次取样数据
  • 融合操作
    • 需求:将表1数据集整理成每行为单一的标识符-变量组合 , 即每个处理,重复,样品对应观测值 。(表2)


reshape2用得好,晚上下班回家早,试试万能数据处理包

表2 数据融合


    • 实现:使用R语言reshape2包

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
获取不同处理间抗病样品和感病对照观测值的平均值 。


reshape2用得好,晚上下班回家早,试试万能数据处理包

表3 重构1


newdata <- dcast(mydata2,Treatment~variable,mean)Treatment Sample Control17.58.522.02.5
  • 重构2
获取不同重复间抗病样品和感病对照观测值的平均值 。


reshape2用得好,晚上下班回家早,试试万能数据处理包

表4 重构2
newdata <- dcast(mydata2,Rep.~variable,mean)Rep. Sample Control15.0624.55
不执行整合:
  • 重构3
进行数据调整
reshape2用得好,晚上下班回家早,试试万能数据处理包

表5 重构3
newdata <- dcast(mydata2,Treatment variable~Rep.)Treatment variable 1 21Sample 8 71Control 9 82Sample 2 22Control 3 2
  • 重构4
进行数据调整
reshape2用得好,晚上下班回家早,试试万能数据处理包

表6 重构4
newdata <- dcast(mydata2,Treatment~variable Rep.)Treatment Sample_1 Sample_2 Control_1 Control_21879822232

四、小结

因为重构1-2中指定了 mean 作为整合函数,所以对数据进行了重塑与整合 。很多情况下,我们不得不在数据分析之前对其进行重塑或整合 , 那么这时候melt()和dcast()函数便推荐使用 。
reshape2用得好,晚上下班回家早,试试万能数据处理包

【reshape2用得好,晚上下班回家早,试试万能数据处理包】图3 数据表格

相关经验推荐