时间:2021-05-20
现在给大家介绍的数据处理技巧是长转宽,也就相当于Excel中的转置,不过用R语言实现的长转宽还有数据合并的功能,自然比Excel强大多了。
这里给大家介绍4个函数,其中melt()、dcast()来自reshape2包,gather()、spread()来自tidyr包
输出结果
> mydata1<-melt(+ mydata,+ id.vars=c("address","name"),#要保留的主字段+ variable.name = "Year",#转换后的分类字段名称(维度)+ value.name = "Sale" #转换后的度量值名称+ )> mydata1 address name Year Sale1 普陀区 store1 sale2014 30002 黄浦区 store2 sale2014 25003 徐汇区 store3 sale2014 21004 浦东新区 store4 sale2014 10005 普陀区 store1 sale2015 30206 黄浦区 store2 sale2015 28007 徐汇区 store3 sale2015 39008 浦东新区 store4 sale2015 20009 普陀区 store1 sale2016 515010 黄浦区 store2 sale2016 360011 徐汇区 store3 sale2016 270012 浦东新区 store4 sale2016 250013 普陀区 store1 sale2017 445014 黄浦区 store2 sale2017 410015 徐汇区 store3 sale2017 400016 浦东新区 store4 sale2017 3200再来看看gather()函数怎么用
> #宽转长——gather> mydata1<-tidyr::gather(+ data=mydata,+ key="Year",+ value="sale",+ sale2014:sale2017+ )> mydata1 name address Year sale1 store1 普陀区 sale2014 30002 store2 黄浦区 sale2014 25003 store3 徐汇区 sale2014 21004 store4 浦东新区 sale2014 10005 store1 普陀区 sale2015 30206 store2 黄浦区 sale2015 28007 store3 徐汇区 sale2015 39008 store4 浦东新区 sale2015 20009 store1 普陀区 sale2016 515010 store2 黄浦区 sale2016 360011 store3 徐汇区 sale2016 270012 store4 浦东新区 sale2016 250013 store1 普陀区 sale2017 445014 store2 黄浦区 sale2017 410015 store3 徐汇区 sale2017 400016 store4 浦东新区 sale2017 3200和melt()函数不同,gather()函数需要指定关键字段key,以及关键字段对应的值value,但是gather()函数更加好理解。
还是用上面的data1数据集,先来看看dcast()函数
#长转宽——dcastdcast( data=mydata1, name+address~Year #左侧是要保留的字段,右侧是要分割的分类变量,列数等于表达式 #右侧分类变量的类别个数)> #长转宽——dcast> dcast(+ data=mydata1,+ name+address~Year+ #左侧是要保留的字段,右侧是要分割的分类变量,列数等于表达式+ #右侧分类变量的类别个数+ )Using sale as value column: use value.var to override. name address sale2014 sale2015 sale2016 sale20171 store1 普陀区 3000 3020 5150 44502 store2 黄浦区 2500 2800 3600 41003 store3 徐汇区 2100 3900 2700 40004 store4 浦东新区 1000 2000 2500 3200dcast()函数的使用规则需要琢磨下才能理解,大家好好看看注释部分,再来看看spread()
#长转宽——spreadtidyr::spread( data=mydata1, key=Year, value=sale)> #长转宽——spread> tidyr::spread(+ data=mydata1,+ key=Year,+ value=sale+ ) name address sale2014 sale2015 sale2016 sale20171 store1 普陀区 3000 3020 5150 44502 store2 黄浦区 2500 2800 3600 41003 store3 徐汇区 2100 3900 2700 40004 store4 浦东新区 1000 2000 2500 3200直接调用tidyr::spread,需要指定关键字段key和对应的值value。
但是从理解上来看,我个人更喜欢tidyr包的函数,使用很清晰,大家可以根据实际情况自行选择,好啦,今天的分享结束,下次再见!
补充:利用R语言对数据行列转制
使用软件:R语言,mysql
使用系统:ubuntu16.04
使用效果前后对比:
使用前
x1 x2 y a A 1 b B 2 c C 3 a A 4使用后(里面的数值可以进行多种变换,主要是把x1,x2改为他们的交叉表)
A B C a 5(1+4) NA NA b NA 2 NA c NA NA 3下载RMysql(由于我使用的是ubuntu,所以使用RMysql):
install.packages("RMySQL")加载所需要的程辑包:
library(RMySQL)将mysql数据导入R:
con<-dbConnect(MySQL(),dbname="database_name",user="user_name",password="password")导入后,所得数据类型是数据框(data.frame)
对于RMySQL这个包,比较重要的语句有这几个:
summary(con) : 用于查看con对应的mysql信息
dbListTables(con) :用于查看con中的所有table
dbRemoveTable(con,”table_name”)
dbReadTable(con,”table_name”)
dbWriteTable(con,”table_name”,value) 其中value类型需要为数据框
我们使用以上的语句,读取所需要变换的表
data=dbReadTable(con,"table_name")然后使用一个重要的函数:tapply()
注意,我下面使用的是我之前举例所用的表
data2=tapply(data\$y,list(data\$x1,data$x2),sum)对于tapply(x,list(a,b),fac)
a和b是形成交叉表的行列表头
而x则是取值,我们当然可以不使用data里面的值当作x
fac则是对x进行的函数运算,比如使用sum,就是将相同的x1,x2的y相加
上面我们已经把数据变换为想要的表格形式了,不过,使用了tapply后,data2的类会变为矩阵(matrix),要想知道数据类型,在R中使用class()便可以查看,而我们所使用的RMySQL包将r中数据写入mysql是需要用数据框的,所以我们要转换矩阵为数据框,那么要怎么做呢,很简单
data3=data.frame(data2)这样,我们的data3便是一个数据框了,使用语句
dbWriteTable(con,test,data3)便写入了一个table于mysql,名字叫做test,数据值为data3.
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1、python大量的库为数据分析提供了完整的工具集2、比起MATLAB、R语言等其他主要用于数据分析语言,python语言功能更加健全3、python库一直在
WPS表格中行列数据想要换一下,该怎么将行列互换,该怎么操作呢?下面我们就来看看使用wps替换功能来转换的教程。软件名称:wpsoffice2016个人版v10
ptb数据集是语言模型学习中应用最广泛的数据集,常用该数据集训练RNN神经网络作为语言预测,tensorflow对于ptb数据集的读取也定义了自己的函数库用于读
既然了解了R语言的基本数据类型,那么如何将庞大的数据送入R语言进行处理呢?送入的数据又是如何在R语言中进行存储的呢?处理这些数据的方法又有那些呢?下面我们一起来
本文实例讲述了js简单实现Select互换数据的方法。分享给大家供大家参考。具体如下:这里基于javascript实现两个Select互换数据,简单实用,大家都