前言
数据透视表是一种交互式的表,可以进行某些计算,如求和、平均和求和等。按照之前介绍的长宽格式数据来说,数据透视表是长格式数据向宽格式数据转换,对转换之后的value值进行某些计算。
【R语言】长宽格式数据相互转换
函数介绍
函数使用
这里使用reshape2包中的dcast函数和acast函数,两个函数都可以将长格式数据转换成宽格式数据,dcast与acast几乎没有区别,唯一的差别在于acast函数的输出结果没有行标签,dcast函数的输出结果有行标签。这里统一使用dcast函数实现。
函数使用
介绍一下函数中几个常用的参数:
dcast(data, formula, fun.aggregate = NULL, ..., margins = NULL,
subset = NULL, drop = TRUE, value.var =....)
data:数据集
formula:形如x ~ y,x为行标签,y为列标签
fun.aggregate:聚合函数,对value值进行处理
margins:是否加上边际值
subset:对结果进行条件筛选
drop:是否保留缺失值
value.var:后面跟要处理的字段
需求描述
数据准备
虚构数据:某电商线下有两个分店,2018年第一季度各分店销售商品情况如下:
##交易月份
TransTime <- rep(c("2018-01", "2018-02", "2018-03"), each = 16)
##分店
Branch <- rep(c("branch_1", "branch_2"), times = 24)
##交易商品
TransGood <- rep(c("Good1","Good2","Good3",
"Good4","Good5","Good6",
"Good7", "Good8"),each = 2, times = 3)
##交易数量
set.seed(123)
TransCnt<- sample(500:1000, 48, replace = T)
##交易金额
set.seed(123)
TransAMT <- sample(5000:10000, 48, replace = T)
data <- data.frame(TransTime, Branch, TransGood, TransCnt, TransAMT)
需求1
每个分店每个月销售商品总量、销售额
##说明对那个字段进行聚合,value.var后面跟哪个字段,这里对销售量处理,故跟TransCnt
dcast(data,
TransTime ~ Branch,
value.var = "TransCnt", sum)
##加上行标签汇总
dcast(data,
TransTime ~ Branch,
value.var = "TransCnt",
sum, margins = "TransTime")
##加上列标签汇总
dcast(data,
TransTime ~ Branch,
value.var = "TransCnt",
sum, margins = "Branch")
##加上行列标签汇总
dcast(data,
TransTime ~ Branch,
value.var = "TransCnt",
sum, margins = TRUE)
运行结果:
各分店每个月销售额情况只需将上述代码value.var = "TransCnt"换成value.var = "TransAmt",注意上图中margins的使用方法。聚合函数可以是mean、max、min、sd、var等。
##最大值
dcast(data, TransTime ~ Branch,value.var = "TransCnt",max)
##最小值
dcast(data, TransTime ~ Branch,value.var = "TransCnt",min)
##平均值
dcast(data, TransTime ~ Branch,value.var = "TransCnt",mean)
##标准差
dcast(data, TransTime ~ Branch,value.var = "TransCnt",sd)
##方差
dcast(data, TransTime ~ Branch,value.var = "TransCnt",var)
需求2
2018年1至3月份商品Good2和Good4两个分店销售总量
library(plyr)
###各商品销售量情况
dcast(data,
TransTime ~ TransGood, value.var = "TransCnt", sum)
###筛选出Good2和Good4商品销售情况
dcast(data,
TransTime ~ TransGood, value.var = "TransCnt", sum,
subset = .(TransGood == "Good2" | TransGood == "Good4"))
运行结果
总结
数据透视表是长格式数据向宽格式数据转换的应用,对转换之后的value值进行各种聚合处理。学会使用R语言就行数据透视表,无需再将数据导出使用excel完成数据透视。