在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. AI基本知识

    一.什么是flops 对flops有疑惑,首先得先捋清这个概念: FLOPS:注意全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为 ...

  2. #Python #密码管理器 无需再记住密码,使用Python实现个人密码管理器

    ​本文在CSDN"彭_Yu的博客"同步发表  目录 1.要点 2.运行原理 3.异或算法简介 4.运行效果 5.实现过程 5.1文件结构 5.2建立数据库 5.3 Python代码 ...

  3. maven资源导出问题

    <!--在build中配置resources,来防止我们资源导出失败的问题--> <build> <resources> <resource> < ...

  4. 小梅哥课程学习——串口发送应用之发送数据(适用于板级验证,时间间隔位100ms)

    //此代码的注意事项,首先这个代码不能仿真成功会出现一定的时间延迟, //因为在做板级验证的时候把时间改成了100ms发送一次,要想仿真成功,把时间改成499999 //使用上一节课设计的发送模块,设 ...

  5. 简单的继承练习——疑问:私有属性在类的方法内调用时,有必要使用get,set方法嘛?

    要求: 创建一个Circle类,设置半径属性和返回面积的方法,在无参构造器中初始化半径值为1. 创建一个Cylinder类,继承Circle类,设置属性高和返回体积的方法,在无参构造器中初始化长度为1 ...

  6. Python之路径处理

    路径处理,需导入 os包 1 import os # 导入 os 包 2 3 """获取运行脚本文件夹的路径""" 4 current_di ...

  7. C++生成均匀分布的随机实数

    #include<random> #include<iostream> int main() { //定义均匀分布对象,均匀分布区间(a,b)为(2,6) std::unifo ...

  8. Oracle Fusion Middleware Introduction

    Oracle Fusion Middleware Oracle Fusion Middleware is a comprehensive family of software products tha ...

  9. abp框架+mysql 数据库 执行批量新增和修改

    protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken. ...

  10. 贪心算法(Java)

    贪心算法 文章目录 贪心算法 0.写在前面 1.贪心算法的基本要素 1.1 贪心选择性质 1.2 最优子结构性质 1.3 贪心算法与动态规划算法的差异 2.贪心算法的特点 3.贪心法的正确性证明 4. ...