R语言进行长宽数据转换

Posted 寻小宁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言进行长宽数据转换相关的知识,希望对你有一定的参考价值。

长宽数据

在日常数据分析过程中,经常会对数据进行长宽转换处理,所谓长宽数据转换就是将数据表中的列变量进行聚合和分裂操作。宽转长:多个列聚合为一列,同时生成value值,这种操作主要是为了方便ggplot2绘图;长转宽:单个列分裂为多个列,同时生成variable变量,这种操作通常是为了导入spss进行统计分析。通常用来执行转换操作的软件包有两种,一种是tidyr包中的gather和sperad函数,一种是reshape2包中的melt和dcast函数,下面就让我们来对这两种方式进行测试比较。

宽转长

转换前数据

(例:宽数据,数据表中存在多个列变量)

转换过程

#############################长宽数据相互转换##############
rm(list = ls())
###生成测试数据###
test<-matrix(c(1201001:1201100,paste0("name",seq(1:100)),round(runif(900,80,100))),100,11,dimnames = list(c(),c("学号","姓名","数学","语文","英语","物理","化学","生物","历史","地理","政治")))%>%data.frame()
###分别载入两个软件包###
library(tidyr)
library(reshape2)
###gather函数与melt函数在宽数据转长数据处理中的应用比较####
###测试结果###
gather(test,科目,分数,names(test)[3:11])%>%head()
melt(test,id=c("学号","姓名"),variable.name = "科目",value.name = "分数")%>%head()

转换后数据


可以看出转换后各个列变量聚合到了“科目”变量下,同时将value值赋到了“分数”变量下;两个函数运算结果无差别,下面尝试用大样本量测试运算速度。

运算速度比较

###大样本测试运算速度###
test<-matrix(c(12010001:12018000,paste0("name",seq(1:8000)),round(runif(72000,80,100))),8000,11,dimnames = list(c(),c("学号","姓名","数学","语文","英语","物理","化学","生物","历史","地理","政治")))%>%data.frame()
gather(test,科目,分数,names(test)[3:11])%>%system.time()
melt(test,id=c("学号","姓名"),variable.name = "科目",value.name = "分数")%>%system.time()

可以看出在进行大样本量宽转长数据处理时melt函数用时更少

长转宽

转换前后数据同“宽转长”相反,图片不再展示

转换过程及输出结果

###spread函数与dcast函数在长数据转宽数据处理中的应用比较#####
test<-matrix(c(12010001:12018000,paste0("name",seq(1:8000)),round(runif(72000,80,100))),8000,11,dimnames = list(c(),c("学号","姓名","数学","语文","英语","物理","化学","生物","历史","地理","政治")))%>%data.frame()
py<-melt(test,id=c("学号","姓名"),variable.name = "科目",value.name = "分数")
###测试结果###
spread(py,科目,value=分数)%>%head()
dcast(py,学号+姓名~科目)%>%head()
###大样本测试运算速度###
spread(py,科目,value=分数)%>%system.time()
dcast(py,学号+姓名~科目)%>%system.time()

可以看出在进行大样本量长转宽数据处理时spread函数用时更少

综上在进行长宽数据转换时可根据自身需要选取相应的函数

https://gitee.com/zhjx19/tidyverse120

以上是关于R语言进行长宽数据转换的主要内容,如果未能解决你的问题,请参考以下文章

R语言数据类型numeric

R语言数据转换(一)2021.2.25

R语言入门06:GEO数据库中数据的下载

R语言数据格式转换函数数据类型判断函数(numericcharactervectormatrixdata.framefactorlogical)R语言数据格式类型转换

R语言factor类型转numeric

R语言factor类型转numeric