tidyr | 批量处理数据的前奏——数据嵌套化
本篇介绍的函数来自tidyr
工具包,它也是tidyverse
系列工具包的重要组成部分。
在之前的推文里,小编介绍了一些数据批量化处理的方法,如下(点击文字可直接跳转):
base | 使用apply族函数进行向量化运算
purrr | 使用map族函数进行向量化运算
技巧 | 如何批量地将整型变量转换为因子变量
dplyr | 提高数据处理效率!数据框的colwise和rowwise操作
在这些推文中,为了方便介绍向量化/批量化操作的特点,小编举的都是一些比较简单的例子,而在实际的数据处理中,通过结合数据的嵌套化操作,apply()
族、map()
族等函数可以实现更复杂场景的批量化运算。
数据嵌套化
nest()
函数的语法结构如下:
nest(.data, ..., .names_sep = NULL)
data:输入对象(数据框结构);
...:嵌套语句。
数据嵌套化和数据分组的区别:
数据分组(
dplyr::group_by()
函数):建立分组索引,但不会实际改变数据框的大小(行数和列数);数据嵌套(
tidyr::nest()
函数):将同一分组对应的其他变量信息嵌套在一个list中,再作为数据框的一个元素,会改变数据框的大小。
以上介绍可能有些抽象,下面通过实例进行介绍它的两种用法。
单独使用
library(tidyverse)
data("iris")nested.iris <- iris %>%nest(petal = c(Petal.Length, Petal.Width), sepal = c(Sepal.Length, Sepal.Width))
通过以上代码,
Petal.Length
和Petal.Width
变量就被嵌套成petal
变量了,Sepal.Length
和Sepal.Width
变量则被嵌套成了sepal
变量;未参与嵌套的变量自动作为分组变量。
嵌套前:
嵌套后:
只有
Species
变量未参与嵌套操作,因此自动被作为分组变量。
通过点击上图中红色框内的按钮,可以查看被嵌套的数据,如下图:
可以看出,被嵌套的数据也是一个完整的数据框结构。
与group_by()
函数连用
nest()
函数还可以跟在group_by()
函数之后使用,这种用法更为常用。示例如下:
nested.iris2 <- iris %>%group_by(Species) %>%nest()
输出对象如下:
嵌套后批量化运算
数据嵌套化使得每组数据独占一行,有利于进行批量化操作,这一点在介绍“线性模型之亚组模型”中已有介绍,这里再重复一下示例:
model <- mtcars%>%group_by(cyl) %>%nest() %>%mutate(model = map(data, ~lm(mpg ~ wt + qsec, data = .x)))
去嵌套化
同取消分组操作一样,也存在取消嵌套化操作,相应函数为unnest()
:
unnest(data, cols, ...,keep_empty = FALSE,ptype = NULL,names_sep = NULL,names_repair = "check_unique")
该函数使用起来也非常简单,默认取消所有嵌套结构。示例如下:
unnested.iris <- unnest(nested.iris)
输出对象与嵌套前的对象一样。
仅取消部分嵌套结构,需指定cols
参数。示例如下:
unnested.iris2 <- unnest(nested.iris, cols = c(petal))
与unnest()
函数相关的还有另外两个函数:unnest_longer()
、unnest_wider()
,这两个函数必须指定col
参数(注意参数名是col
而不是cols
)。
unnest_longer()
函数输出对象与unnest()
相似,但数据结构存在区别。示例如下:
unnested.iris3 <- unnest_longer(nested.iris, col = petal)
上图虽然看起来和unnest()
函数的输出对象一样,但它实际上只有3个变量:
names(unnested.iris3)
## [1] "Species" "petal" "sepal"
unnest_wider()
函数生成的是“宽”数据。示例如下:
unnested.iris4 <- unnest_wider(nested.iris, col = petal)
tidyr | 批量处理数据的前奏——数据嵌套化相关推荐
- 6.9 用Python操控数据库(批量删除,百度新闻数据爬取与存储,写入数据时进行去重处理,pandas读取sql数据)
学习完MySQL数据库的基本操作后,下面来学习如何用Python连接数据库,并进行数据的插入.查找.删除等操作. 6.9.1 用PyMySQL库操控数据库 上一节在phpMyAdmin 中创建了数据库 ...
- 批量修改数据映射_Docker 数据卷操作「Docker 系列-6」
数据卷入门 在前面的案例中,如果我们需要将数据从宿主机拷贝到容器中,一般都是使用 Docker 的拷贝命令,这样性能还是稍微有点差,没有办法能够达到让这种拷贝达到本地磁盘 I/O 性能呢?有! 数据卷 ...
- PHP如何批量更新MYSQL中的数据
最近项目需要用到批量更新数据库里的数据,在网上找了一下这方面的例子,觉得这个还不错,分享给大家. 在这个业务里里面涉及到了更新两张数据表,那么大家是不是会想到非常简单,马上上代码 $sql = &qu ...
- mysql导入多个txt_MySQL批量导入Excel、txt数据
我想Excel是当今最大众化的批量数据管理软件了吧,所以我们会经常涉及到将Excel中数据导入到MySQL中的工作.网上有一些关于直接将Excel导入MySQL的教程,不知道是我安装的office不对 ...
- Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据
通常我们获取游标数据是用 fetch some_cursor into var1, var2 的形式,当游标中的记录数不多时不打紧.然而自 Oracle 8i 起,Oracle 为我们提供了 fetc ...
- kibana数据导入导出_MySQL数据库批量导出和导入查询数据
MySQL数据库批量导出和导入查询数据的过程是使用-e参数去执行命令. 由于工作需要,我需要先在一个MySQL库中查询出结果,然后以查出结果为参数,去放入另外一个MySQL数据库中当成where的条件 ...
- 快速清除oracle多个表,Oracle数据库之批量清除一个表的数据,TB级别数据
本文主要向大家介绍了Oracle数据库之批量清除一个表的数据,TB级别数据,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. 有个需求,要求清理8TB的数据,只保留一个月的数据,现 ...
- mysql批量导入txt数据_MySQL批量导入Excel、txt数据
我想Excel是当今最大众化的批量数据管理软件了吧,所以我们会经常涉及到将Excel中数据导入到MySQL中的工作.网上有一些关于直接将Excel导入MySQL的教程,不知道是我安装的office不对 ...
- matlab批量处理excel(CSV)文件数据
微信公众号:好玩的matlab 今天是2019-1-29,参加完2019年美国大学生数学建模竞赛,小伙伴都回家了,就我一个人在寝室,太无聊了,就把在比赛中遇到的excel批处理,写一下思路(ps:其实 ...
最新文章
- 解决SVN 每次操作都需要重输入用户名密码问题
- 互联网1分钟 |1227
- 数据可视化01--笔记
- Go中new和make的区别
- PHP页面显示中文字符出现乱码
- select * 排除字段_interesting数据库查找语句Select还能这样用
- python定义一个空列表lt_4. Python 基础之阶段测试(一)
- mappedBy的作用
- netperf测试最大连接数
- 软件开发中三员管理职责
- mysql改列名_mysql怎么修改列名
- 美国向谷歌、微软、雅虎要个人敏感信息,他们真给了
- awd的批量脚本 pwn_北极星杯 awd复现
- 国内最前沿的科技——室内导航技术发展及其现状
- 数字地球与计算机技术联系,数字地球与现代测绘科学的发展问题
- 一文学会 PC搭建opengl es C++开发环境
- 一键seo提交收录_Api提交百度搜索进行文章收录-网站SEO
- 微型计算机期末考试复盘(知识点总结)
- Ubuntu系统下制作USB启动盘
- 黑苹果开机几分钟就死机
热门文章
- Java基础学习总结(94)——Java线程再学习
- linux修改last权限,Linux常用命令2/3(有关用户、权限管理的命令)--Unix/Linux操作系统04...
- chararray遍历_数组遍历的三种方法
- WebKit 内核浏览器 initKeyboardEvent 函数原型
- 比特币技术公司创始人:ICO是一场被骗子玩弄的网络泡沫
- linux--vi的使用
- 从趣味游戏到排序算法(2)
- Kitura —— 基于 Swift 的 Web 框架
- 《抓住听众心理——演讲者要知道的100件事》一2.听众需要上下文
- 实验楼第三次实验报告