在R语言中,tidyr主要提供了一个类似Excel中数据透视表 (pivottable)的功能; gather和spread函数将数据在长格式和宽格式之间相互转化,应用在比如稀疏矩阵和稠密矩阵之间的转化; separate和union方法提供了数据分组拆分、合并的功能,应用在nominal数据的转化上,整洁数据是进行数据再加工的基础。

一、tidyr包的导入

R将整洁数据定义为:每个变量的数据存储在自身的列中,每个观测值的数据存储在其自身的行中。

install.packages("tidyr")
library(tidyr)

在tidyr包中,一般包括几个函数:gather()函数;spread()函数;separate()函数;unite()函数;缺失值处理replace_na()函数。

二、tidyr包函数的使用

2.1 gather()函数

gather()函数,它可以实现将以列位字段的数据表,转化为一列长数据格式,即二维表向一维表的转换。

df <- data.frame(姓名=c('赵','钱','孙','李','周'),
语文=c(95,89,79,88,81),
数学=c(89,88,81,78,90),
英语=c(89,78,73,69,80))
df2 <- gather(df,long,成绩,语文,数学,英语)

2.2 spread()函数

tdata<-mtcars[1:10,1:3]                            #截取部分数据
tdata<-data.frame(names=rownames(tdata),tdata) #将tdata的行名赋值给向量names,并将其添加tdata中
gather(tdata,key="Key",value="Value",names:disp)
gdata<-gather(tdata,key="Key",value="Value",2:4) #与上面同义,取names到disp列就是取1到4列
spread(gdata,key="Key",value="Value") #将已经变长的数据按着Key列和Value列进行还原为宽数据

2.3 separate()函数

   Group Year Qtr.1 Qtr.2 Qtr.3 Qtr.4
1 1 2006 4 7 1 6
2 1 2007 4 6 2 4
3 1 2008 4 5 3 8
4 1 2009 4 4 4 8
5 2 2006 4 3 5 9
6 2 2007 4 2 6 10
7 2 2008 4 1 7 11
8 2 2009 4 0 8 12
9 3 2006 4 -1 9 13
10 3 2007 4 -2 10 14
11 3 2008 4 -3 11 15
12 3 2009 4 -4 12 16
#将上面数据读入R中
dd<- read.table("clipboard",header=T)
dd1=gather(dd,jijie,value,Qtr.1:Qtr.4)
separate(dd1,col=jijie,into = c("Qtrt","jijie"),sep = "\\.")

2.4 unite()函数

df<-data.frame(x=c(NA,"a.b","a.c","b.c"))         #生成数据框
x<-separate(df,col=x,into=c("A","B")) #数据分割
#x<-separate(df,col=x,into=c("A","B"),sep="\\.") #数据分割,因为.在R语言中属于元字符,是正则表达式的内容,代表任何字符,因此sep="."会被解读为任意字符,所以要加转义符号写成sep="\\."
x<-separate(df,col=x,into=c("A","B"),sep="\\.") #将分割数据赋值给x
unite(x,col="AB",A,B,sep=".") #将分割数据x合并起来

2.5 replace_na()

data_wide <- data.frame(姓名=c('赵','钱','孙','李','周'),
语文=c(95,89,79,88,NA),
数学=c(89,88,81,78,90),
英语=c(89,78,73,69,NA))
#以60分为几个,将它填入数据缺失值中。
data_wide %>%
replace_na(list(语文=60,英语=60))

三、总结

参考文献

1.(R语言tidyr包处理数据2021.3.6)[https://www.jianshu.com/p/b8e6bc0825db]

2.(R语言数据处理:tidyr包学习)[https://blog.csdn.net/m0_56444893/article/details/125212325]

tidyr包几个函数的用法的更多相关文章

  1. tidyr包--数据处理包

    tidyr包的作者是Hadley Wickham.这个包常跟dplyr结合使用.本文将介绍tidyr包中下述四个函数的用法: gather—宽数据转为长数据.类似于reshape2包中的melt函数 ...

  2. java String.split()函数的用法分析

    java String.split()函数的用法分析 栏目:Java基础 作者:admin 日期:2015-04-06 评论:0 点击: 3,195 次 在java.lang包中有String.spl ...

  3. R︱并行计算以及提高运算效率的方式(parallel包、clusterExport函数、SupR包简介)

    要学的东西太多,无笔记不能学~~ 欢迎关注公众号,一起分享学习笔记,记录每一颗"贝壳"~ --------------------------- 终于开始攻克并行这一块了,有点小兴 ...

  4. 有关日期的函数操作用法总结,to_date(),trunc(),add_months();

    相关知识链接: Oracle trunc()函数的用法 oracle add_months函数 Oracle日期格式转换,tochar(),todate() №2:取得当前日期是一个星期中的第几天,注 ...

  5. Oracle to_date()函数的用法

    Oracle to_date()函数的用法 to_date()是Oracle数据库函数的代表函数之一,下文对Oracle to_date()函数的几种用法作了详细的介绍说明,供您参考学习. 在Orac ...

  6. js中bind、call、apply函数的用法

    最近一直在用 js 写游戏服务器,我也接触 js 时间不长,大学的时候用 js 做过一个 H3C 的 web的项目,然后在腾讯实习的时候用 js 写过一些奇怪的程序,自己也用 js 写过几个的网站.但 ...

  7. Oracle trunc()函数的用法

    Oracle trunc()函数的用法 /**************日期********************/1.select trunc(sysdate) from dual --2013-0 ...

  8. freemarker内置函数和用法

    原文链接:http://www.iteye.com/topic/908500 在我们应用Freemarker 过程中,经常会操作例如字符串,数字,集合等,却不清楚Freemrker 有没有类似于Jav ...

  9. matlab中patch函数的用法

    http://blog.sina.com.cn/s/blog_707b64550100z1nz.html matlab中patch函数的用法——emily (2011-11-18 17:20:33) ...

  10. JavaScript中常见的数组操作函数及用法

    JavaScript中常见的数组操作函数及用法 昨天写了个帖子,汇总了下常见的JavaScript中的字符串操作函数及用法.今天正好有时间,也去把JavaScript中常见的数组操作函数及用法总结一下 ...

随机推荐

  1. JAVA pta 前三次大作业回顾与分析

    一.前言:总结三次题目集的知识点.题量.难度等情况 今年初次接触java,通过这三次大作业的练习,我对java有了一定的认识,相比于其他编程语言来说,java更复杂,要求也更严谨,需要掌握的知识也更多 ...

  2. excel的几个常用方法

    --笔记开始: 1.if(条件,真值,假值),类似于编程语言中的三元运算符.条件为真时返回真值,条件为假时返回假值. 2.match(目标值,查找区域,查找类型),一般查找类型为0(等值查找),查找区 ...

  3. 使用MailKit发送邮件

    MailKit的项目地址:https://github.com/jstedfast/MailKit 使用: 1 定义发送邮件所需要的model或者dto,该model可根据个人的需要进行修改 1 pu ...

  4. ByteArrayInputStream和ByteArrayOutputStream不需要关闭流的原理--博客摘录

    ---------------- 版权声明:本文为CSDN博主「PSUUGDUFNM」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明.原文链接:https://blo ...

  5. php 解密 java des 密文

    背景 对方系统java des 加密, 我们用 php 解密 模式基本介绍 ECB模式:电子密本方式,JAVA封装的DES算法的默认模式,就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节 ...

  6. 十大经典排序之堆排序(C++实现)

    堆排序 通过将无序表转化为堆,可以直接找到表中最大值或者最小值,然后将其提取出来,令剩余的记录再重建一个堆, 取出次大值或者次小值,如此反复执行就可以得到一个有序序列,此过程为堆排序. 思路: 1.创 ...

  7. springmvc拦截器的简单创建

    找到前端控制器配置文件: 配置拦截器: 实现接口,定义自己的规则:

  8. Lua元表应用举例:配置表格转为Lua配置表

    把配置表格.xlsx数据转为Lua配置表,其实就是把表格数据用Lua写一遍,这里的实现重点就是setmetatable设置元表. 以下以表格student_info.xlsx举例,展示对应Lua配置表 ...

  9. 用反证法说明List<Object>和List<String>不存在子父类关系可行吗?

    看宋红康老师的Java基础视频讲解,视频中用反证法证明List

  10. 关于Windows10纯净启动的相关修改流程

    关于纯净启动的相关流程 自动登录 打开命令提示符运行control userpasswords2后回车 在弹出的用户账户窗口中,取消勾选"要使用本计算机,用户必须输入用户名和密码" ...