Tidyverse|tidyr数据重塑之gather,spread(长数据宽数据转化)
时间:2022-07-22
本文章向大家介绍Tidyverse|tidyr数据重塑之gather,spread(长数据宽数据转化),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
长型数据和宽型数据在数据分析中非常常见 ,其中宽型数据更具可读性,长型数据则更适合做分析。
R-tidyr主要有以下几大功能:
- gather—宽数据转为长数据;
- spread—长数据转为宽数据;
- unit—多列合并为一列;
- separate—将一列分离为多列
unit和separate可参考Tidyverse|数据列的分分合合,一分多,多合一,本文主要介绍利用tidyr包实现长宽数据的转化。
一 载入R包,数据
library(tidyverse)
#library(tidyr)
#使用mtcars内置数据集
data(mtcars)
head(mtcars)
二 宽数据转为长数据
使用gather
函数:gather(data, key, value, … , na.rm = FALSE, convert = FALSE)
其中 data:为待转换的宽数据
key:将原数据框中的所有列赋给一个新变量key
value:将原数据框中的所有值赋给一个新变量value
...:可以指定哪些列聚到一列中 (同reshape2区别)
na.rm:是否删除缺失值
1 转换全部列
#宽转长
mtcars_long <- mtcars %>%
rownames_to_column("car_ID") %>%
gather(key = "variables", value = "values")
head(mtcars_long)
2 部分列保持不变
区别于reshape2,...
只将指定变量从宽数据变成长数据
1) 不gather car_ID
列 (行名转化而来)
mtcars_long2 <- mtcars %>%
rownames_to_column("car_ID") %>%
gather(key = "variables", value = "values", - car_ID)
head(mtcars_long2)
2)gather 在 mpg:am之间的所有列
mtcars_long3 <- mtcars %>%
rownames_to_column("car_ID") %>%
gather(key = "variables", value = "values", mpg:am)
head(mtcars_long3)
三 长数据转为宽数据
使用spread
函数:spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE)
data:待转换的长数据
key:需要将变量值拓展为字段的变量
value:需要分散的值
fill:对于缺失值,可将fill的值赋值给被转型后的缺失值
mtcars_wide <- mtcars_long2 %>%
spread(variables, values)
head(mtcars_wide)
这实际将原来gather后的结果还原为gather前, 结果与mtcars一样,只是各列的相互位置稍有调整。
参考资料:
Working_in_the_Tidyverse
- WCF技术剖析之十六:数据契约的等效性和版本控制
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(13)-系统日志和异常的处理③
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(12)-系统日志和异常的处理②
- Enterprise Library Policy Injection Application Block 之二: PIAB设计和实现原理
- 育碧与研究所共同开发的AI,是什么样的?
- 大家都在关注AI,但这些事你可能并不知道!
- AI—未来医疗
- 微信小程序新功能上线 一键连Wi-Fi手机变门禁卡
- 使用xUnit为.net core程序进行单元测试(中)
- Asp.Net 用Jquery和一般处理程序实现无刷新上传大文件
- WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用
- WCF技术剖析之十四:泛型数据契约和集合数据契约(上篇)
- WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇)
- WCF技术剖析(卷1)之前言
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法