R(8): tidyr
tidy(整洁),Tidyr包是由Hadely Wickham创建,这个包提高了整理原始数据的效率,tidyr包的4个常用的函数及其用途如下:
- gather()——它把多列放在一起,然后转化为key:value对。这个函数会把宽格式的数据转化为长格式。它是reshape包中melt函数的一个替代
- spread()——它的功能和gather相反,把key:value对转化成不同的列
- separate()——它会把一列拆分为多列
- unite()——它的功能和separate相反,把多列合并为一列
长形表和宽形表,简单的说,长形表就是一个观测对象可由多行组成,而宽形表则是一个观测仅由一行组成。
初始
- 安装载入包
install.packages("tidyr")
library(tidyr) - 组织数据
> name <- c("A","B","C")
> gender <- c("F","F","M")
> province <- c("JS","SH","HN")
> age <- c(18,22,19)
> df_wide <- data.frame(name = name, gender = gender, province = province, age = age)
> df_wide
name gender province age
1 A F JS 18
2 B F SH 22
3 C M HN 19
gather()
- Usage: gather(data, key, value, ..., na.rm = FALSE, convert = FALSE, factor_key = FALSE)
- data:需要被转换的宽形表
- key:将原数据框中的所有列赋给一个新变量key
- value:将原数据框中的所有值赋给一个新变量value
- …:可以指定哪些列聚到一列中
- na.rm:是否删除缺失值
- 默认将所有列存放到key中,如下例
> df_gather <- gather(data = df_wide, key = variable, value = value)
Warning message:
attributes are not identical across measure variables; they will be dropped
> df_gather
variable value
1 name A
2 name B
3 name C
4 gender F
5 gender F
6 gender M
7 province JS
8 province SH
9 province HN
10 age 18
11 age 22
12 age 19 - 指定需要被聚为一列的字段
> df_wide %>% gather(key=vars,value=value,gender:age)
name vars value
1 A gender F
2 B gender F
3 C gender M
4 A province JS
5 B province SH
6 C province HN
7 A age 18
8 B age 22
9 C age 19 上面的代码等价于:df_wide %>% gather(key=vars,value=value,-name)
spread()
- Usage:spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE, sep = NULL)
- data:为需要转换的长形表
- key:需要将变量值拓展为字段的变量
- value:需要分散的值
- fill:对于缺失值,可将fill的值赋值给被转型后的缺失值
- 功能:将一列分离为多列
- 示例数据
> name <- c("A","A","A","B","B")
> product <- c("P1","P2","P3","P1","P4")
> price <- c(100,130,55,100,78)
> df_long <- data.frame(name = name, product = product, price = price)
> df_long
name product price
1 A P1 100
2 A P2 130
3 A P3 55
4 B P1 100
5 B P4 78 - 列分离
> df_long_expand <- spread(data = df_long, key = product, value = price)
> df_long_expand
name P1 P2 P3 P4
1 A 100 130 55 NA
2 B 100 NA NA 78 被转型后的数据框中存在缺失值,如果想给缺失值传递一个指定值的话,就需要fill参数的作用。
> spread(data = df_long, key = product, value = price,fill = 0)
name P1 P2 P3 P4
1 A 100 130 55 0
2 B 100 0 0 78
separate()
- Usage:separate(data, col, into, sep = "[^[:alnum:]]+", remove = TRUE,convert = FALSE, extra = "warn", fill = "warn", ...)
- data:为数据框
- col:需要被拆分的列
- into:新建的列名,为字符串向量
- sep:被拆分列的分隔符
- remove:是否删除被分割的列
- 示例数据
> id <- c(1,2)
> datetime <- c(as.POSIXlt("2015-12-31 13:23:44"), as.POSIXlt("2016-01-28 21:14:12"))
> df <- data.frame(id = id, datetime = datetime)
> df
id datetime
1 1 2015-12-31 13:23:44
2 2 2016-01-28 21:14:12 - 使用separate()函数将日期时间值分割为年、月、日、时、分、秒
> #拆成日期和时间
> separate1 <- separate(df,col="datetime",into=c("date","time"),sep=" ",remove=FALSE)
> separate1
id datetime date time
1 1 2015-12-31 13:23:44 2015-12-31 13:23:44
2 2 2016-01-28 21:14:12 2016-01-28 21:14:12
>
> separate2 <- separate(separate1,col="date",into=c("year","month","day"),sep="-",remove=FALSE)
> separate2
id datetime date year month day time
1 1 2015-12-31 13:23:44 2015-12-31 2015 12 31 13:23:44
2 2 2016-01-28 21:14:12 2016-01-28 2016 01 28 21:14:12
>
> separate3 <- separate(separate2,col="time",into=c("hh","mm","ss"),sep=":",remove=TRUE)
> separate3
id datetime date year month day hh mm ss
1 1 2015-12-31 13:23:44 2015-12-31 2015 12 31 13 23 44
2 2 2016-01-28 21:14:12 2016-01-28 2016 01 28 21 14 12l 连接串写法
> df %>% separate(.,col="datetime",into=c("date","time"),sep=" ",remove=TRUE) %>% separate(.,col="date",into=c("year","month","day"),sep="-",remove=TRUE)%>% separate(.,col="time",into=c("hh","mm","ss"),sep=":",remove=TRUE)
id year month day hh mm ss
1 1 2015 12 31 13 23 44
2 2 2016 01 28 21 14 12
unite()
- 与separate()函数相反,它将多列合并为一列
- Usage: unite(data, col, ..., sep = "_", remove = TRUE)
- data:为数据框
- col:被组合的新列名称
- …:指定哪些列需要被组合
- sep:组合列之间的连接符,默认为下划线
- remove:是否删除被组合的列
- 示例
> df1
id year month day hh mm ss
1 1 2015 12 31 13 23 44
2 2 2016 01 28 21 14 12
> df1 %>% unite(.,col="date",year,month,day,sep="-")%>% unite(.,col="time",hh,mm,ss,sep=":")%>% unite(.,col="datetime",date,time,sep=" ")
id datetime
1 1 2015-12-31 13:23:44
2 2 2016-01-28 21:14:12
R(8): tidyr的更多相关文章
- R语言-tidyr和dplyr
一.安装和加载 1.安装并加载tidyr和dplyr包 install.packages("tidyr") library(tidyr) install.packages(&quo ...
- R语言进行数据预处理wranging
R语言进行数据预处理wranging li_volleyball 2016年3月22日 data wrangling with R packages:tidyr dplyr Ground rules ...
- R语言进行数据预处理
R语言进行数据预处理wranging li_volleyball 2016年3月22日 data wrangling with Rpackages:tidyr dplyr Ground rules l ...
- [原]CentOS7安装Rancher2.1并部署kubernetes (二)---部署kubernetes
################## Rancher v2.1.7 + Kubernetes 1.13.4 ################ ##################### ...
- 利用python进行数据分析2_数据采集与操作
txt_filename = './files/python_baidu.txt' # 打开文件 file_obj = open(txt_filename, 'r', encoding='utf-8' ...
- Django项目:CRM(客户关系管理系统)--81--71PerfectCRM实现CRM项目首页
{#portal.html#} {## ————————46PerfectCRM实现登陆后页面才能访问————————#} {#{% extends 'king_admin/table_index.h ...
- R语言中的数据处理包dplyr、tidyr笔记
R语言中的数据处理包dplyr.tidyr笔记 dplyr包是Hadley Wickham的新作,主要用于数据清洗和整理,该包专注dataframe数据格式,从而大幅提高了数据处理速度,并且提供了 ...
- R语言数据处理包dplyr、tidyr笔记
dplyr包是Hadley Wickham的新作,主要用于数据清洗和整理,该包专注dataframe数据格式,从而大幅提高了数据处理速度,并且提供了与其它数据库的接口:tidyr包的作者是Hadley ...
- 【翻译】Awesome R资源大全中文版来了,全球最火的R工具包一网打尽,超过300+工具,还在等什么?
0.前言 虽然很早就知道R被微软收购,也很早知道R在统计分析处理方面很强大,开始一直没有行动过...直到 直到12月初在微软技术大会,看到我软的工程师演示R的使用,我就震惊了,然后最近在网上到处了解和 ...
随机推荐
- LTrim、RTrim 和 Trim 函数
返回不带前导空格 (LTrim).后续空格 (RTrim) 或前导与后续空格 (Trim) 的字符串副本. LTrim(string) RTrim(string) Trim(string) strin ...
- 如何获取选定部分的HTML
其实这个程序很简单,首先是如何获取选定部分的HTML,还记得这段吗: HTMLDoc := WebBrowser1.Document as IHTMLDocument2; SelectRange : ...
- ESET免费申请
Eset 免费试用30天申请地址 http://www.comss.info/list.php?c=NOD32 https://secure.eset.ie/msv/evaluate/evaluate ...
- 组件的 keep-alive 简介
本篇文章,我们来讲一下keep-alive的实现. 更容易看懂 Vue中,有三个内置的抽象组件,分别是keep-alive.transition和transition-group, 它们都有一个共同 ...
- Ubuntu 12.04硬盘安装教程
从服务器下载Ubuntu 12.04光盘镜像文件到 C 盘.下载地址:\\192.167.100.225\share\Tool\Ubuntu\ubuntu-12.04.1-desktop-amd64. ...
- ZEDGRAPH画图心得
OleDbConnection odcConnection = new OleDbConnection(MyConnectionString); //打开连接 C#操作Access之按列读取mdb o ...
- arcgis-tomcat-cors
C:\Program Files\ArcGIS\Server\framework\runtime\tomcat\webapps\arcgis#rest\WEB-INF\ (1)添加cors-filte ...
- hadoop之HDFS运行小观察
hadoop 是当前很火的一个 大数据运行框架和平台, 对于这个神奇的大家伙我甚是搞不清楚,前段时间闲来无视便把 HADOOP 运行起来, 看着它的操作记录存储部分(操作日志), IMAGE 记录着 ...
- 【计算机视觉】如何使用于仕琪老师的libfacedetect人脸检测库
前言 最近又开始进行人脸检测方向的内容,看到于仕琪老师的多角度检测想试一下,还不清楚原理,先测试效果如何. libfacedetect人脸检测库是深圳大学于仕琪老师发布的开源库,与opencv自带的人 ...
- AOP jdk动态代理
一: jdk动态代理是Spring AOP默认的代理方法.要求 被代理类要实现接口,只有接口里的方法才能被代理,主要步骤是先创建接口,接口里创建要被代理的方法,然后定义一个实现类实现该接口,接着将被代 ...