r语言中如何使用reshape2包将宽型数据转换成长型数据
r语言中如何使用reshape2包将宽型数据转换成长型数据
这篇文章主要介绍了r语言中如何使用reshape2包将宽型数据转换成长型数据的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇r语言中如何使用reshape2包将宽型数据转换成长型数据文章都会有所收获,下面我们一起来看看吧。
长数据 vs 宽数据
对于宽型数据,每列代表一个不同的变量。例如datasets包中的mtcars数据集就是宽型数据:
#WideformatmpgcyldisphpdratwtqsecvsamgearcarbMazdaRX421.061601103.902.62016.460144MazdaRX4Wag21.061601103.902.87517.020144Datsun71022.84108933.852.32018.611141Hornet4Drive21.462581103.083.21519.441031HornetSportabout18.783601753.153.44017.020032Valiant18.162251052.763.46020.221031
对于长型数据,一列包含了所有可能的变量,另一列是对应的取值。上面的数据可以用长型数据来表示:
#Longformatvariablevalue1mpg21.02mpg21.03mpg22.84mpg21.45mpg18.76mpg18.1...variablevalue347carb2348carb2349carb4350carb6351carb8352carb2
长型数据可以包含两个以上的列,尤其是提供ID变量的时候。如下所述。
在实际应用中,宽型数据更具可读性,长型数据则更适合做分析。因此,知道如何在它们之间进行转换非常有用。
reshape2包中两个主要的函数是:
melt——将宽型数据融合成长型数据
cast——将长型数据转成宽型数据
melt
接下来,我们在datasets包中的mtcars数据集上进行操作。它一开始是上面展示的宽型数据。我们要把它融合成下面的长型数据:
mtcars$car<-rownames(mtcars)mtcarsMelt<-melt(mtcars)head(mtcarsMelt)carvariablevalue1MazdaRX4mpg21.02MazdaRX4Wagmpg21.03Datsun710mpg22.84Hornet4Drivempg21.45HornetSportaboutmpg18.76Valiantmpg18.1
注:译者在R里得到的是melt自动选取car作为ID变量,原文是选取car和cyl作为ID变量。要得到相同结果只需在参数id.vars中指定相应变量即可。
我们可以通过参数variable.name和value.name分别对variable和value列重命名。例如,我们想对所有的汽车根据它的汽缸数和齿轮数做分类。可以像下面这样:
mtcarsMelt<-melt(mtcars,id.vars=c('cyl','gear'),variable.name='carVariable',value.name='carValue')head(mtcarsMelt)cylgearcarVariablecarValue164mpg21264mpg21344mpg22.8463mpg21.4583mpg18.7663mpg18.1tail(mtcarsMelt)cylgearcarVariablecarValue31545carPorsche914-231645carLotusEuropa31785carFordPanteraL31865carFerrariDino31985carMaseratiBora32044carVolvo142E
通常,使用变量组合来唯一的识别每个数据点个好办法,但是这里有多个点的cyl和gear组合值却是相同的,这不是好的办法。当你需要把数据转回宽型数据时会有点问题了(下面会看到)。
cast
cast函数的作用是将长型数据转成宽型数据。cast函数的两种主要类型是:
dcast——返回的结果是一个数据框
acast——返回的结果可以是向量、矩阵或者数组
由于数据框对象是最常见的,我将演示如何使用dcast。下面展示的是长型数据转回成宽型数据:
mtcarsMelt<-melt(mtcars)mtcarsCast<-dcast(mtcarsMelt,car~variable)head(mtcarsCast)carmpgcyldisphpdratwtqsecvsamgearcarb1AMCJavelin15.283041503.153.43517.3000322CadillacFleetwood10.484722052.935.25017.9800343CamaroZ2813.383502453.733.84015.4100344ChryslerImperial14.784402303.235.34517.4200345Datsun71022.84108933.852.32018.6111416DodgeChallenger15.583181502.763.52016.870032
dcast函数通过一个式子来把数据转成宽型数据。在本篇译文中,由于我在R上自动的到ID变量只有car,所以我给出的式子是car ~ variable。这里car是ID变量,variable变量列的名称。要想跟原文一样只需在melt时指定id.vars参数即可。
如果我们指定cyl和gear作为ID变量融合数据后,再转回宽型变量时,会得到如下所示的结果:
mtcarsCast<-dcast(mtcarsMelt,cyl+gear~variable)head(mtcarsCast)cylgearmpgdisphpdratwtqsecvsamcarbcar143111111111124488888888883452222222222463222222222256444444444446651111111111
会得到警告信息:Aggregation function missing: defaulting to length。数据集显示的是每个cyl和gear组合的总的观测数。这是因为dcast函数不能唯一标识每个数据点。然而,它还有其他用处。例如,我们通过如下所示的fun.aggregate参数可以得到每个cyl和gear组合值所对应的所有变量的平均值。
mtcars$car<-NULLmtcarsMelt<-melt(mtcars,id.vars=c('cyl','gear'))mtcarsCast<-dcast(mtcarsMelt,cyl+gear~variable,fun.aggregate=mean)head(mtcarsCast)cylgearmpgdisphpdratwtqsecvsamcarb14321.500120.10097.03.702.46500020.01001.00.001.024426.925102.62576.04.112.37812519.61251.00.751.534528.200107.700102.04.101.82650016.80000.51.002.046319.750241.500107.52.923.33750019.83001.00.001.056419.750163.800116.53.913.09375017.67000.50.504.066519.700145.000175.03.622.77000015.50000.01.006.0
这里,我们删除了car列。这是因为我们不希望在mtcarsMelt的value列里存在非数值型数据,否则会得到错误。
关于“r语言中如何使用reshape2包将宽型数据转换成长型数据”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“r语言中如何使用reshape2包将宽型数据转换成长型数据”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道。
推荐阅读
-
R语言标签平滑是什么
-
R语言怎么批量读取某路径下文件内容
R语言怎么批量读取某路径下文件内容今天小编给大家分享一下R语言怎么...
-
R语言怎么安装芯片原始数据标准化的包
R语言怎么安装芯片原始数据标准化的包这篇“R语言怎么安装芯片原始数...
-
TPM,FPKM(R语言怎么计算转录组中Count)
R语言怎么计算转录组中Count,TPM,FPKM本文小编为大家...
-
r语言如何绘制蛋白质组和转录组相关性图
r语言如何绘制蛋白质组和转录组相关性图这篇“r语言如何绘制蛋白质组...
-
怎么用R语言的limma方法进行芯片数据差异表达分析
怎么用R语言的limma方法进行芯片数据差异表达分析这篇文章主要介...
-
怎么用R语言的rgb函数获取颜色
怎么用R语言的rgb函数获取颜色今天小编给大家分享一下怎么用R语言...
-
怎么使用R语言筛选基因
-
在R语言中如何利用split划分数据
在R语言中如何利用split划分数据这篇文章给大家分享的是有关在R...
-
怎么用R包STRINGdb来进行蛋白互作网络分析
怎么用R包STRINGdb来进行蛋白互作网络分析这篇文章给大家分享...