R中的stack和unstack函数
时间:2022-07-25
本文章向大家介绍R中的stack和unstack函数,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
我们用R做数据处理的时候,经常要对数据的格式进行变换。例如将数据框(dataframe)转换成列表(list),或者反过来将列表转换成数据框。那么今天小编就给大家介绍一对R函数来实现这样的功能。
这一对函数就叫做stack和unstack。从字面意思上来看就是堆叠和去堆叠,就像下面这张图展示的这样。
那么R里面这两个函数具体可以实现什么样的功能呢?下面这张图可以帮助大家来理解。unstack就是根据数据框的第二列的分组信息,将第一列的数据划分到各个组,是一个去堆叠的过程。而stack刚好是一个相反的过程。
一、unstack
下面我们来看几个具体的例子
例如现在我们手上有一个数据框,里面的数据来自PlantGrowth
我们可以先看看PlantGrowth 中的内容,第一列是重量,第二列是不同的处理方式,可以看作是一个分类的变量。
> PlantGrowth
weight group
1 4.17 ctrl
2 5.58 ctrl
3 5.18 ctrl
4 6.11 ctrl
5 4.50 ctrl
6 4.61 ctrl
7 5.17 ctrl
8 4.53 ctrl
9 5.33 ctrl
10 5.14 ctrl
11 4.81 trt1
12 4.17 trt1
13 4.41 trt1
14 3.59 trt1
15 5.87 trt1
16 3.83 trt1
17 6.03 trt1
18 4.89 trt1
19 4.32 trt1
20 4.69 trt1
21 6.31 trt2
22 5.12 trt2
23 5.54 trt2
24 5.50 trt2
25 5.37 trt2
26 5.29 trt2
27 4.92 trt2
28 6.15 trt2
29 5.80 trt2
30 5.26 trt2
接下来我们来看看unstack的效果
df = PlantGrowth
unstacked_df = unstack(df)
unstacked_df
结果如下,因为这里ctrl,trt1和trt2中的样本刚好都是10个,所以这里结果看上去还像是一个数据框,但是当group这个分组变量里面,每组的数目不一样的时候,你就会发现结果其实是一个列表。
ctrl trt1 trt2
1 4.17 4.81 6.31
2 5.58 4.17 5.12
3 5.18 4.41 5.54
4 6.11 3.59 5.50
5 4.50 5.87 5.37
6 4.61 3.83 5.29
7 5.17 6.03 4.92
8 4.53 4.89 6.15
9 5.33 4.32 5.80
10 5.14 4.69 5.26
例如我们取前25行来unstack一下,你就会发现区别了
df<-PlantGrowth
unstacked_list = (unstack(df[1:25,]))
unstacked_list
结果如下
$ctrl
[1] 4.17 5.58 5.18 6.11 4.50 4.61 5.17 4.53 5.33 5.14
$trt1
[1] 4.81 4.17 4.41 3.59 5.87 3.83 6.03 4.89 4.32 4.69
$trt2
[1] 6.31 5.12 5.54 5.50 5.37
二、stack
stack其实是unstack的反向操作。
stacked_df = stack(unstacked_df)
#修改列名
names(stacked_df)=c("weight","group")
stacked_df
结果如下,这里stack之后列名可以自己再通过names(stacked_df)修改一下
weight group
1 4.17 ctrl
2 5.58 ctrl
3 5.18 ctrl
4 6.11 ctrl
5 4.50 ctrl
6 4.61 ctrl
7 5.17 ctrl
8 4.53 ctrl
9 5.33 ctrl
10 5.14 ctrl
11 4.81 trt1
12 4.17 trt1
13 4.41 trt1
14 3.59 trt1
15 5.87 trt1
16 3.83 trt1
17 6.03 trt1
18 4.89 trt1
19 4.32 trt1
20 4.69 trt1
21 6.31 trt2
22 5.12 trt2
23 5.54 trt2
24 5.50 trt2
25 5.37 trt2
26 5.29 trt2
27 4.92 trt2
28 6.15 trt2
29 5.80 trt2
30 5.26 trt2
在使用stack函数的时候,也可以对组进行操作,比如筛选和过滤
stacked_df1 = stack(unstacked_df, select = -ctrl)
stacked_df1
这段代码就在stack的时候去掉了ctrl组,得到的结果如下,就只剩下trt1和trt2这两个组了。
values ind
1 4.81 trt1
2 4.17 trt1
3 4.41 trt1
4 3.59 trt1
5 5.87 trt1
6 3.83 trt1
7 6.03 trt1
8 4.89 trt1
9 4.32 trt1
10 4.69 trt1
11 6.31 trt2
12 5.12 trt2
13 5.54 trt2
14 5.50 trt2
15 5.37 trt2
16 5.29 trt2
17 4.92 trt2
18 6.15 trt2
19 5.80 trt2
20 5.26 trt2
今天的理论部分就先分享到这里,后面小编会使用这两个函数来给大家举个真实的应用案例,敬请期待。
- Day1下午解题报告
- 【关关的刷题日记54】Leetcode 226. Invert Binary Tree
- Day2上午解题报告
- 【关关的刷题日记55】Leetcode 404. Sum of Left Leaves
- CSS选择器详解
- 前端开发必备之Emmet
- virtualenvwrapper + pyenv 打造多版本 Python 环境
- 【关关的刷题日记56】Leetcode 107 Binary Tree Level Order Traversal II
- 新手Python渗透工具入门
- ReentrantLock 与 AQS 源码分析
- python识别验证码遇到问题解决方法
- Angular开发实践(七): 跨平台操作DOM及渲染器Renderer2
- Leetcode-Easy 121. Best Time to Buy and Sell Stock
- MongoDB初识
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- spring之通过注解方式配置Bean(二)
- 【python-leetcode103-树的宽度遍历】二叉树的锯齿形层次遍历
- 图卷积网络(GCN)python实现
- hadoop伪分布式之配置yarn并运行MR程序(WordCount)
- 【python-leetcode637-树的宽度遍历】二叉树的层平均值
- graphSAGE的python实现
- 【python-leetcode111-树的宽度遍历】二叉树的最小深度
- 基于TypeScript封装Axios笔记(四)
- spring之泛型依赖注入
- 【python-leetcode113-树的深度遍历】路径总和Ⅱ
- spring之为什么要使用AOP(面向切面编程)?
- useContext更佳实践
- 【论文笔记】张航和李沐等提出:ResNeSt: Split-Attention Networks(ResNet改进版本)
- [前端]GOFLY项目-响应式登录页的设计和实现
- [GO] golang练习项目-gorm与mysql的增删查改操作