专栏首页用户7627119的专栏R中的stack和unstack函数

R中的stack和unstack函数

我们用R做数据处理的时候,经常要对数据的格式进行变换。例如将数据框(dataframe)转换成列表(list),或者反过来将列表转换成数据框。那么今天小编就给大家介绍一对R函数来实现这样的功能。

这一对函数就叫做stackunstack。从字面意思上来看就是堆叠和去堆叠,就像下面这张图展示的这样。

那么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

今天的理论部分就先分享到这里,后面小编会使用这两个函数来给大家举个真实的应用案例,敬请期待。

本文分享自微信公众号 - 生信交流平台(gh_d04ce007f7b8),作者:生信交流平台

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 盘一盘 Python 系列 4 - Pandas (下)

    数据表可以按「键」合并,用 merge 函数;可以按「轴」来连接,用 concat 函数。

    用户5753894
  • pandas中数据框的reshape操作

    数据框的长宽转换对于熟悉R语言的朋友而言,应该不会陌生。使用ggplot2画图时,最常用的数据处理就是长宽转换了。在pandas中,也提供了数据框的长宽转换功能...

    生信修炼手册
  • pandas系列6-重塑reshape

    DF的pivot本质上就是set_index先创建层次化索引,再利用unstack进行重塑。

    皮大大
  • pandas 一维台账数据与二维表格数据的转换

    需求:低版本excel对于使用透视表后,索引方向会出现合并,需要将其恢复为“台账”样式。

    forxtz
  • unstack函数应用——生成单细胞marker基因表格

    前面给大家简单介绍了R中的stack和unstack函数。今天给大家举一个真实的案例,就是在单细胞数据分析过程中,如何将挑选到的marker基因转换成表格的形式...

    生信交流平台
  • 《Pandas Cookbook》第08章 数据清理1. 用stack清理变量值作为列名2. 用melt清理变量值作为列名3. 同时stack多组变量4. 反转stacked数据5. 分组聚合后uns

    第01章 Pandas基础 第02章 DataFrame运算 第03章 数据分析入门 第04章 选取数据子集 第05章 布尔索引 第06章 索引对齐 ...

    SeanCheney
  • 数据分析之Pandas变形操作总结

    pandas 是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。

    Datawhale
  • pandas之数据聚合和分组运算

    数据分析少不了对数据进行分组、统计。分组运算,一般是对数据的某一个分组键进行拆分(分成几组),在拆分的分组上应用某一个函数或者运算,最后把运算结果合并起...

    文科生的python自学之路
  • R语言数据分析与挖掘(第一章):数据预处理(3)——数据整理

    在介绍了缺失值处理的方法之后,我们可以得到完整的数据集,但在进行数据分析之前,还需要对数据进行整理,下面我们将介绍数据整理的相关知识。

    DoubleHelix
  • 从pandas中的这几个函数,我看懂了道家“一生二、二生三、三生万物”

    pandas是用python进行数据分析最好用的工具包,没有之一!从数据读写到预处理、从数据分析到可视化,pandas提供了一站式服务。而其中的几个聚合统计函数...

    luanhz
  • python pandas基础之三—数据处理

    1、合并merge():pandas数据合并操作,类似与SQL语言中的join,使用一个或多个键将数据合并在一起。merge()函数默认执行的是内连接。

    小末快跑
  • 【学习】干货:与数据挖掘有关或有帮助的R包和函数的集合

    与数据挖掘有关或者有帮助的R包和函数的集合。 1、聚类 常用的包: fpc,cluster,pvclust,mclust 基于划分的方法: kmeans, pa...

    小莹莹
  • R语言数据挖掘相关包总结-转帖

    与数据挖掘有关或者有帮助的R包和函数的集合。 1、聚类 常用的包: fpc,cluster,pvclust,mclust 基于划分的方法: kmeans,...

    数据饕餮
  • 【数据分析 R语言实战】学习笔记 第三章 数据预处理 (下)

    R中缺失值以NA表示,判断数据是否存在缺失值的函数有两个,最基本的函数是is.na()它可以应用于向量、数据框等多种对象,返回逻辑值。

    统计学家
  • 与数据挖掘有关或有帮助的R包和函数的集合

    rpart,party,randomForest,rpartOrdinal,tree,marginTree,

    华章科技
  • 详解pd.DataFrame中的几种索引变换

    pandas中最常用的数据结构是DataFrame,而DataFrame相较于嵌套list或者二维numpy数组更好用的原因之一在于其提供了行索引和列名。本文主...

    luanhz
  • tf.stack

    将一列秩为R的张量叠加成一个秩为(R+1)的张量。 将值中的张量列表沿轴维进行打包,将其打包成一个比值中的每个张量的秩高1的张量。给出形状张量长度N的列表(A,...

    狼啸风云
  • Pandas常用的数据处理方法

    本文的Pandas知识点包括: 1、合并数据集 2、重塑和轴向旋转 3、数据转换 4、数据聚合 1、合并数据集 Pandas中合并数据集有多种方式,这里我们来逐...

    石晓文
  • python 数据分析实现长宽格式的转换

    补充知识:python使用_pandas_用stack和unstack进行行列重塑(key-value变宽表)

    砸漏

扫码关注云+社区

领取腾讯云代金券