前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【教你R语言】转换长宽格式表的落地方案

【教你R语言】转换长宽格式表的落地方案

作者头像
1480
发布2019-05-22 20:51:53
2K0
发布2019-05-22 20:51:53
举报
文章被收录于专栏:数据分析1480

前言

做数据分析以及制作表格的时候,会遇到长宽格式数据之间相互转换的问题,之前介绍了如果在Hive是使用sql语句实现,现介绍一下如何在R语言中实现长宽格式数据相互转换。

【Hive】实现长格式数据转换成宽格式数据

【Hive】实现宽格式数据转换成长格式数据

长宽格式数据

之前在【Hive】实现长格式数据转换成宽格式数据举了一个栗子:

宽格式数据:每个变量单独成一列为宽格式数据,变量的所有属性都在同一行。

长格式数据:长数据中变量的ID没有单独列成一列,而是整合在同一列。

需求描述

下面左右两种长宽格式数据相互转换:

需求实现

R语言中有两个包中的函数可以实现长宽格式数据的相关转换:

数据准备 ##长格式数据data <- data.frame( user_no = rep(c("u001", "u002", "u003"), each = 6), message = rep(c("name", "age", "sex", "education", "regtime", "first_buytime"), times = 3), detail = c("Sulie", "25", "male", "master", "2018/1/2", "2018/1/3", "LuBan", "30", "male", "Bachelor", "2018/3/4", "2018/5/5", "ZhenJi", "27", "female", "PhD", "2018/4/3","2018/5/4")) ##宽格式数据data1 <- data.frame( user_no = c("u001", "u002", "u003"), name = c("SuLie", "LuBan", "ZhenJi"), sex = c("male", "male", "female"), age = c(25, 30, 27), education = c("master", "Bachelor", "PhD"), regtime = c("2018/1/2", "2018/3/4", "2018/4/3"), first_buytime = c("2018/1/3", "2018/5/5", "2018/5/4"))

reshape2包实现长宽数据转换

  • ##长格式数据转换成宽格式数据library(reshape2)library(dplyr) dcast( data = data, user_no ~ message ##左侧是要保留的字段,右侧是要分割的字段,可以理解为key ##这样汇总的就是value值了) ##宽格式数据转换成长格式数据melt(data1, id.vars=c("user_no"), ##要保留的字段 variable.name = "message", #理解为key value.name = "detail" #理解为value) %>% arrange(user_no)

tidyr包实现长宽数据转换

代码语言:javascript
复制
##长格式数据转换成宽格式数据library(tidyr)library(dplyr)spread(  data = data,  key = "message", ##key键,原来表中字段  value = "detail" ##value值,原来表中字段)##宽格式数据转换成长格式数据gather(  data = data1,  key = "message",  ##key键,新增字段  value = "detail", ##value值,新增字段  name:first_buytime ) %>%   arrange(user_no)

运行结果:

长格式数据转换成宽格式数据运行结果

宽格式数据转换成长格式数据运行结果

总结

R语言reshap2和tidyr包都可以实现长宽格式数据相互转换,相比较而言,更喜欢tidyr包中的实现方式,与Hive中类似,中间过渡map格式类型数据,key键和value值明确,结合sql中map格式数据更容易理解R语言tidyr包中实现方式。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据分析1480 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档