r语言tidyverse教程:3数据重塑tidyr

这篇具有很好参考价值的文章主要介绍了r语言tidyverse教程:3数据重塑tidyr。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

R语言系列:

  • 编程基础💎循环语句💎向量、矩阵和数组💎列表、数据帧
  • 排序函数💎apply系列函数
  • tidyverse:readr💎tibble💎tidyr

tidyr顾名思义就是让数据更整齐,而让数据变得整齐的方法,就是调整行列,在tidyr中,有下列4各函数用于行列转换

  • gather:宽数据->长数据,聚行成列
  • spread:长数据->宽数据,展列为行
  • unite :多列合并为一列
  • separate:一列分离为多列

宽数据和长数据

为了理解这个包的意义,需要先学习两个概念:宽数据和长数据。

宽数据的特点是,每一列代表一个属性,每一行代表一个个体。例如下面这个表格就是宽数据

姓名 年龄 性别
张三 18
李四 19

长数据则会把上面的表头和值做一个一一对应,然后罗列出来,每一行都是一对"变量-值"

变量
姓名 张三
姓名 李四
年龄 18
年龄 19
性别
性别

但这样的转换过于粗暴,会导致属于相同个体的不同属性完全分开,无法恢复。所以一种更加安全的转换方式可以为

姓名 变量
张三 年龄 18
李四 年龄 19
张三 性别
李四 性别

长宽数据转换

tidyr中的gatherspread用于长数据和宽数据之间的转换,为了测试这两个函数,先创建一个变量

test <- data.frame(姓名=c("张三", "李四", "王五"), 年龄=c(18,19,20), 性别=c("男", "女", "男"), 成绩=c(95,96,97))
test
"
  姓名 年龄 性别 成绩
1 张三   1895
2 李四   1996
3 王五   2097
"

然后用gather函数,对其调整,可以发现gIris变成了长数据,其中-姓名表示不对姓名进行重排

library(tidyr)
gTest <- gather(test, key, value, -姓名)

其结果为

> gTest
  姓名  key value
1 张三 年龄    18
2 李四 年龄    19
3 王五 年龄    20
4 张三 性别    男
5 李四 性别    女
6 王五 性别    男
7 张三 成绩    95
8 李四 成绩    96
9 王五 成绩    97

接下来再用spreadgTest进行分割,果然又恢复了原样。

> sTest <- spread(gTest, key=key, value=value)
> 
> sTest
  姓名 成绩 年龄 性别
1 李四   96   192 王五   97   203 张三   95   18

合并和分割列

unit函数可以将数据框中的多列合并成一列,separate与之相反。

下面在test中新插入一列id

> test$id <- c(1,2,3)
> test
  姓名 年龄 性别 成绩 id
1 张三   1895  1
2 李四   1996  2
3 王五   2097  3

由于id和名字是一一对应的,所以二者可以合并在一起

uTest <- unite(test, 人物, id, 姓名, sep='.')
uTest
"
    人物 年龄 性别 成绩
1 1.张三   1895
2 2.李四   1996
3 3.王五   2097
"

可以看到,id姓名这两列通过.连接,合并在了一起,并且得到了新的列名人物

接下来,通过separate将这列再分开

# 这里有个坑,如果分隔符是英文句号,需要用双斜线转义
sepTest <- separate(uTest, 人物, c('id', '姓名'), sep='\\.')

结果为

> sepTest
  id 姓名 年龄 性别 成绩
1  1 张三   1895
2  2 李四   1996
3  3 王五   2097

函数参数

最后,将这四个函数的声明列出来,来看一看其参数列表

gather(data=,key=,value=,...,na.rm=,convert=,factor_key=)
spread(data = ,key = ,value = ,fill = ,convert = ,drop = )
unite(data = ,col = ,... = ,sep = ,remove = )
separate(data = ,col = ,into = ,sep = ,remove = , convert = ,extra = ,fill = ,...)

其中,gather, spread中的data, key, value,以及unite, separate中的data, col, into, sep等均在前面演示过,其他参数含义如下文章来源地址https://www.toymoban.com/news/detail-445314.html

  • 由于gatherspread涉及到长数据,而长数据是由键值对构成的,所以二者包含keyvalue的选项。
  • na.rm 为布尔型,为T时将删除缺失值
  • convertT时,进行数据类型转换
  • factor_keyF时,自动转为字符串,否则转为因子
  • spread, separate都涉及到一列转为多列的操作,故而由fill参数,用于替换缺失值
  • removeT时,保留参与组合的列

到了这里,关于r语言tidyverse教程:3数据重塑tidyr的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • R语言 tidyverse系列学习笔记(系列1)

    tidyverse 译 “洁净的宇宙” = “极乐净土” 以 iris 鸢尾花数据集为例 ** 查看数据集** ** 查看维度dimention** iris 数据集有150个对象(observation),5列 ( Sepal.Length , Sepal.Width , Petal.Length , Petal.Width , Species ) 数据太多,只想看一部分可以用 head 和 tail ,默认展示 6 个 observations 想展示

    2024年02月07日
    浏览(43)
  • 同态加密:重塑数据隐私与安全的未来

    同态加密技术是当今信息安全领域的一个重要研究方向,它允许在加密数据上直接进行计算,而无需将数据解密。这种加密方式对于保护数据隐私和增强云计算安全具有重要意义。在这篇文章中,我们将深入探讨同态加密的基本概念、技术特点、应用场景以及面临的挑战。

    2024年04月14日
    浏览(42)
  • java数据结构与算法刷题-----LeetCode566. 重塑矩阵

    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完): https://blog.csdn.net/grd_java/article/details/123063846 代码:时间复杂度O(r*c).除题目要求外,算法本身没有需要额外空间,空间复杂度O(1) 从0开始算,一个3列n行矩阵中,每行就有3个元

    2024年01月21日
    浏览(46)
  • C语言入门教程,C语言学习教程(第三部分:C语言变量和数据类型)二

    前面我们多次提到了字符串,字符串是多个字符的集合,它们由 \\\" \\\" 包围,例如 \\\"http://c.biancheng.net\\\" 、 \\\"C语言中文网\\\" 。字符串中的字符在内存中按照次序、紧挨着排列,整个字符串占用一块连续的内存。 当然,字符串也可以只包含一个字符,例如 \\\"A\\\" 、 \\\"6\\\" ;不过为了操作方

    2024年01月17日
    浏览(51)
  • 【Go】Go 语言教程--数据类型(四)

    Go 语言教程–介绍(一) Go 语言教程–语言结构(二) Go 语言教程–语言结构(三) 在 Go 编程语言中,数据类型用于声明函数和变量。 数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。

    2024年02月12日
    浏览(49)
  • Go语言编程教程-基本数据类型

    了解布尔类型 了解整数类型 了解浮点数类型 了解复数类型 了解字符串类型 了解字符类型 类型 名称 取值范围 说明 bool 布尔类型 true 或 false 默认值为 false 类型 名称 取值范围 说明 uint8 8位无符号整型 0 ~ 255 uint16 16位无符号整型 0 ~ 65535 uint32 32位无符号整型 0 ~ 4294967295 uint6

    2024年02月04日
    浏览(170)
  • C 语言教程:数据类型和格式说明符

    C 中的变量必须是指定的 数据类型 ,并且您必须在 printf() 函数中使用 格式说明符 来显示它: 数据类型指定了变量将存储的信息的大小和类型。 在本教程中,我们将重点关注最基本的类型: 数据类型 大小 描述 int 2 或 4 个字节 存储整数,没有小数点 float 4 个字节 存储包含

    2024年02月04日
    浏览(38)
  • 数据结构与算法教程,数据结构C语言版教程!(第五部分、数组和广义表详解)五

    数组和广义表,都用于存储逻辑关系为“一对一”的数据。 数组存储结构,99% 的编程语言都包含的存储结构,用于存储不可再分的单一数据;而广义表不同,它还可以存储子广义表。 本章重点从矩阵的角度讨论二维数组的存储,同时讲解广义表的存储结构以及有关其广度和

    2024年01月23日
    浏览(50)
  • 数据结构与算法教程,数据结构C语言版教程!(第五部分、数组和广义表详解)三

    数组和广义表,都用于存储逻辑关系为“一对一”的数据。 数组存储结构,99% 的编程语言都包含的存储结构,用于存储不可再分的单一数据;而广义表不同,它还可以存储子广义表。 本章重点从矩阵的角度讨论二维数组的存储,同时讲解广义表的存储结构以及有关其广度和

    2024年01月21日
    浏览(48)
  • 【教程】MySQL数据库学习笔记(三)——数据定义语言DDL(持续更新)

    写在前面: 如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持! 第一章 《认识与环境搭建》 第二章 《数据类型》 第三章 《数据定义语言DDL》 DDL(Data Definition Language,数据定义语言) 是用于定义和管理数据库对象(如表、视图、索引等

    2024年02月20日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包