用R进行数据长宽转换
中科白癜风 http://finance.sina.com.cn/chanjing/b/20090930/09073071708.shtml/12/7 #在R语言中,提供数据长宽转换的包主要有两个:#reshape2::melt/dcast#tidyr::gather/spreadlibrary("reshape2")library("tidyr") mydata-data.frame(Name=c("苹果","谷歌","脸书","亚马逊","腾讯"),Company=c("Apple","Google","Facebook","Amozon","Tencent"),Sale=c(,,,,),Sale=c(,,,,),Sale=c(,,,,),Sale=c(,,,,))mydata ##NameCompanySaleSaleSaleSale##1苹果Apple##2谷歌Google##3脸书Facebook##4亚马逊Amozon##5腾讯Tencent #数据重塑(宽转长):#melt函数是reshape2包中的数据宽转长的函数mydata1-melt(mydata,#待转换的数据集名称id.vars=c("Company","Name"),#要保留的主字段variable.name="Year",#转换后的分类字段名称(维度)value.name="Sale"#转换后的度量值名称)mydata1 ##CompanyNameYearSale##1Apple苹果Sale##2Google谷歌Sale##3Facebook脸书Sale##4Amozon亚马逊Sale##5Tencent腾讯Sale##6Apple苹果Sale##7Google谷歌Sale##8Facebook脸书Sale##9Amozon亚马逊Sale##10Tencent腾讯Sale##11Apple苹果Sale##12Google谷歌Sale##13Facebook脸书Sale##14Amozon亚马逊Sale##15Tencent腾讯Sale##16Apple苹果Sale##17Google谷歌Sale##18Facebook脸书Sale##19Amozon亚马逊Sale##20Tencent腾讯Sale #在tidyr包中的gather也可以非常快捷的完成宽转长的任务:data1-gather(data=mydata,#待转换的数据集名称key="Year",#转换后的分类字段名称(维度)value="Sale",#转换后的度量值名称Sale:Sale#选择将要被拉长的字段组合)#(可以使用x:y的格式选择连续列,也可以以-z的格式排除主字段)data1 ##NameCompanyYearSale##1苹果AppleSale##2谷歌GoogleSale##3脸书FacebookSale##4亚马逊AmozonSale##5腾讯TencentSale##6苹果AppleSale##7谷歌GoogleSale##8脸书FacebookSale##9亚马逊AmozonSale##10腾讯TencentSale##11苹果AppleSale##12谷歌GoogleSale##13脸书FacebookSale##14亚马逊AmozonSale##15腾讯TencentSale##16苹果AppleSale##17谷歌GoogleSale##18脸书FacebookSale##19亚马逊AmozonSale##20腾讯TencentSale #而相对于数据宽转长而言,数据长转宽就显得不是很常用,因为长转宽是数据透视,#这种透视过程可以通过汇总函数或者类数据透视表函数来完成。#但是既然数据长宽转换是成对的需求,自然有对应的长转宽函数。#reshape2中的dcast函数可以完成数据长转宽的需求:data2=dcast(data=data1,#数据集名称Name+Company~Year)#x1+x2+……~class ##UsingSaleasvaluecolumn:usevalue.vartooverride. #这一项是一个转换表达式,表达式左侧列#出要保留的主字段(即不会被扩宽的字段,右侧则是要分割的分类变量,扩展之后的#宽数据会增加若干列度量值,列数等于表达式右侧分类变量的类别个数)data2 ##NameCompanySaleSaleSaleSale##1谷歌Google##2脸书Facebook##3苹果Apple##4腾讯Tencent##5亚马逊Amozon #除此之外,tidyr包中的spread函数在解决数据长转宽方面也是很好的一个选择。#spread:spread(data=data1,#带转换长数据框名称key=Year,#带扩宽的类别变量(编程新增列名称)value=Sale)#带扩宽的度量值(编程新增列度量值) ##NameCompanySaleSaleSaleSale##1谷歌Google##2脸书Facebook##3苹果Apple##4腾讯Tencent##5亚马逊Amozon ## |
转载请注明地址:http://www.tanhuaa.com/ncth/11013.html
- 上一篇文章: 沈阳沈河区房顶做防水电话,沈阳沈河专业房
- 下一篇文章: 没有了