tidyr包--数据处理包
tidyr包的作者是Hadley Wickham。这个包常跟dplyr结合使用。本文将介绍tidyr包中下述四个函数的用法:
- gather—宽数据转为长数据。类似于reshape2包中的melt函数
- spread—长数据转为宽数据。类似于reshape2包中的cast函数
- unit—多列合并为一列
- separate—将一列分离为多列
1.载入包
# 使用datasets包中的mtcars数据集做演示 library(tidyr) library(dplyr) head(mtcars)
# 为方便处理,在数据集中增加一列car mtcars$car <- rownames(mtcars) mtcars <- mtcars[, c(, :)] View(mtcars)
2.gather--宽数据转为长数据
使用gather()函数实现宽表转长表,语法如下: gather(data, key, value, …, na.rm = FALSE, convert = FALSE) data:需要被转换的宽形表 key:将原数据框中的所有列赋给一个新变量key value:将原数据框中的所有值赋给一个新变量value …:可以指定哪些列聚到同一列中 na.rm:是否删除缺失值
开始使用:
# 除了car列外,其余列聚合成两列,分别命名为attribute和value mtcarsNew <- mtcars %>% gather(attribute, value, -car) head(mtcarsNew)
如你所见,除了car列外,其余列聚合成两列,分别命名为attribute和value。tidyr很好的一点是可以只gather若干列而其他列保持不变。如果你想gather在map和gear之间的所有列而保持carb和car列不变,可以像下面这样做:
# gather在map和gear之间的所有列而保持carb和car列不变 mtcarsNew <- mtcars %>% gather(attribute, value, mpg:gear) head(mtcarsNew)
3.spread--长数据转为宽数据
有时,为了满足建模或绘图的要求,往往需要将长形表转换为宽形表,或将宽形表变为长形表。如何实现这两种数据表类型的转换。使用spread()函数实现长表转宽表,语法如下:
spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE) data:为需要转换的长形表 key:需要将变量值拓展为字段的变量 value:需要分散的值 fill:对于缺失值,可将fill的值赋值给被转型后的缺失值
使用:
mtcarsSpread <- mtcarsNew %>% spread(attribute, value)
head(mtcarsSpread)
car carb mpg cyl disp hp drat wt qsec vs am gear
AMC Javelin
Cadillac Fleetwood
Camaro Z28
Chrysler Imperial
Datsun
Dodge Challenger
4.unite--多列合并为一列
unite的调用格式如下:
unite(data, col, …, sep = “_”, remove = TRUE) data:为数据框 col:被组合的新列名称 …:指定哪些列需要被组合 sep:组合列之间的连接符,默认为下划线 remove:是否删除被组合的列
其作用是将多列合并为一列,举例如下:
# 虚构一些数据 ) date <- : hour <- sample(:, ) min <- sample(:, ) second <- sample(:, ) ) data <- data.frame(date, hour, min, second, event) View(data)
# 把date,hour,min和second列合并为新列datetime # R中的日期时间格式为"Year-Month-Day-Hour:Min:Second" dataNew <- data %>% unite(datehour, date, hour, sep = ' ') %>% unite(datetime, datehour, min, second, sep = ':') View(dataNew)
5.separate--将一列分离为多列
separate()函数可将一列拆分为多列,一般可用于日志数据或日期时间型数据的拆分,语法如下:
separate(data, col, into, sep = “[^[:alnum:]]+”, remove = TRUE, convert = FALSE, extra = “warn”, fill = “warn”, …) data:为数据框 col:需要被拆分的列 into:新建的列名,为字符串向量 sep:被拆分列的分隔符 remove:是否删除被分割的列
举例如下:
# 可以用separate函数将数据恢复到刚创建的时候
# 首先,将datetime分为date列和time列 然后,将time列分为hour,min,second列
data1 <- dataNew %>%
separate(datetime, c('date', 'time'), sep = ' ') %>%
separate(time, c('hour', 'min', 'second'), sep = ':')
data1
6.tidyr包0.5.0版本新特性
目前tidyr包已更新至0.5.1版本,接下来简要介绍0.5.0版本中三个有用的新特性:
准备工作:
library('tidyr')
library(tibble)
注:为了保持跟原文一致,本文用的是data.frame的精简版data_frame。需加载tibble包。
三个新特性
(1)separate_rows():通过分隔符将那些含有多个值的字段拆分为多行。
separate_rows(data, ..., sep = "[^[:alnum:].]+", convert = FALSE) data:数据 ...:需要被拆分的列 sep:分隔符
示例操作:
df <- data_frame(x = :,y = c("a,b","d,e,f"));df
df %>% separate_rows(y,sep = ",")
df %>% separate(y,c("y1","y2","y3"),sep = ",",fill = "right")
(2)spread()函数增加了一个sep参数:用于将列名设置为“key|sep|value”格式。这在对字段为数值型数据做重塑时非常有用。
spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE,sep = NULL) data:为需要转换的长形表 key:需要将变量值拓展为字段的变量 value:需要分散的值 fill:对于缺失值,可将fill的值赋值给被转型后的缺失值 sep:用于将列名设置为“key|sep|value”格式
示例:
df <- data_frame(x = c(,,),
key = c(,,),
val = c("a","b","c"));df
df %>% spread(key,val)
df %>% spread(key,val,sep = "_")
(3)unnest()函数增加了一个.sep参数。当数据框的多个列包含有相同变量名的时候非常有用:
unnest()嵌套list的列
unnest(data, ..., .drop = NA, .id = NULL, .sep = NULL) data:数据框 ...:要嵌套的列 .id:用于显示列表中定义的名称 .sep:当数据框的多个列包含相同变量名的时候非常有用
使用示例:
df <- data_frame(x = :,
y1 = list(data_frame(y = ),data_frame(y = )),
y2 = list(data_frame(y = "a"),data_frame(y = "b")))
df
df %>% unnest()
df %>% unnest(.sep = "_")
同时,unnest()函数添加了.id参数用于显示列表中定义的名称:
df <- data_frame(x = :,
y = list(a = :,b = :));df
df %>% unnest()
df %>% unnest(.id = "id")
本文链接:http://www.cnblogs.com/homewch/p/5778405.html
tidyr包--数据处理包的更多相关文章
- R语言中的数据处理包dplyr、tidyr笔记
R语言中的数据处理包dplyr.tidyr笔记 dplyr包是Hadley Wickham的新作,主要用于数据清洗和整理,该包专注dataframe数据格式,从而大幅提高了数据处理速度,并且提供了 ...
- R语言数据处理包dplyr、tidyr笔记
dplyr包是Hadley Wickham的新作,主要用于数据清洗和整理,该包专注dataframe数据格式,从而大幅提高了数据处理速度,并且提供了与其它数据库的接口:tidyr包的作者是Hadley ...
- 数据处理包plyr和dplyr包的整理
以下内容主要参照 Introducing dplyr 和 dplyr 包自带的简介 (Introduction to dplyr), 复制了原文对应代码, 并夹杂了个人理解和观点 (多附于括号内). ...
- 【TCP协议】(3)---TCP粘包黏包
[TCP协议](3)---TCP粘包黏包 有关TCP协议之前写过两篇博客: 1.[TCP协议](1)---TCP协议详解 2.[TCP协议](2)---TCP三次握手和四次挥手 一.TCP粘包.拆包图 ...
- Socket/TCP粘包、多包和少包, 断包
转发: https://blog.csdn.net/pi9nc/article/details/17165171 为什么TCP 会粘包 前几天,调试mina的TCP通信, 第一个协议包解析正常,第二个 ...
- 关于war包 jar包 ear包 及打包方法
关于war包 jar包 ear包 及打包方法 war包:是做好一个web应用后,通常是网站打成包部署到容器中 jar包:通常是开发的时候要引用的通用类,打成包便于存放管理. ear包:企业级应用 通常 ...
- 记录一个UDP收包丢包的问题
这几天写GB28181平台接入层代码,对收到的PS包进行解包时,总是出现误码,最终导致rtsp点播服务中画面花屏. 分析了码流抓包数据之后,发现网络上没有丢包,遂认为PS流解包代码有bug,于是埋头分 ...
- linux包之包管理命令rpm-yum
背景 YUM(Yellow dog Updater, Modified)为多个Linux发行版的前端软件包管理器,例如 Redhat RHEL, CentOS & Fedora. YUM通过调 ...
- Python标准库03 路径与文件 (os.path包, glob包)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 路径与文件的简介请参看Linux文件系统 os.path包 os.path包主要是 ...
随机推荐
- 20145206邹京儒《Java程序设计》第4周学习总结
20145206 <Java程序设计>第4周学习总结 教材学习内容总结 第六章 6.1 何谓继承 继承基本上就是避免多个类间重复定义共同行为 package cc.openhome; pu ...
- Lattice 的 Framebuffer IP核使用调试笔记之datasheet笔记
本文由远航路上ing 原创,转载请标明出处. 学习使用以及调试Framebuffer IP 核已经有一段时间了,调试的时候总想记录些东西,可是忙的时候就没有时间来写,只有先找个地方记录下,以后再总结. ...
- 电脑没有关机可能出现发博文dns异常(write)
现在是把装系统的技巧基本掌握,其实弄了这么多次还是有一个突破点,就是安装系统win7选择cd的iso是要ide模式.
- 大话数据结构–1.基础知识+2.算法
2.算法: 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每个指令表现为一个或多个操作. 特性:输入.输出.有穷性.确定性.可行性. 2.9.1.算法时间复杂度: 语句 ...
- 阿里云 SWAP
https://yq.aliyun.com/articles/52098 https://www.kejianet.cn/aliyun-swap/
- MongoDB基本命令
1. 启动和停止MongoDB: 执行mongod命令启动MongoDB服务器.mongod有很多可配置的选项,我们通过mongod --help可以查看所有选项,这里仅介绍一些主要选项: - ...
- 19.状态者模式(State Pattern)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 常用的数据统计Sql 总结(转)
转:http://www.cnblogs.com/zhangweizhong/p/5577842.html 最近刚在搞一个BI的项目,里面需要大量的sql 数据统计相关运用,加深了我又对SQL的理解与 ...
- 设计模式学习之观察者模式(Observer,行为型模式)(7)
1.观察者模式又叫做发布-订阅模式. 2.观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 3 ...
- ListView优化中ViewHolder要不要定义为static静态内部类?
给学生讲课的时候,发现存在这个问题,下来百度了下,发现很纠结,涉及到了内部类对外部类的引用,静态类的生命周期等java知识,现总结如下: static class ViewHolder { //定义l ...