R语言中的stack和unstack函数

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

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

那么R里面这两个函数具体可以实现什么样的功能呢?下面这张图可以帮助大家来理解。unstack就是根据数据框的第二列的分组信息,将第一列的数据划分到各个组,是一个去堆叠的过程。而stack刚好是一个相反的过程。

 

一、unstack

下面我们来看几个具体的例子

例如现在我们手上有一个数据框,里面的数据来自PlantGrowth

我们可以先看看PlantGrowth 中的内容,第一列是重量,第二列是不同的处理方式,可以看作是一个分类的变量。

> PlantGrowth    weight group1    4.17  ctrl2    5.58  ctrl3    5.18  ctrl4    6.11  ctrl5    4.50  ctrl6    4.61  ctrl7    5.17  ctrl8    4.53  ctrl9    5.33  ctrl10   5.14  ctrl11   4.81  trt112   4.17  trt113   4.41  trt114   3.59  trt115   5.87  trt116   3.83  trt117   6.03  trt118   4.89  trt119   4.32  trt120   4.69  trt121   6.31  trt222   5.12  trt223   5.54  trt224   5.50  trt225   5.37  trt226   5.29  trt227   4.92  trt228   6.15  trt229   5.80  trt230   5.26  trt2

接下来我们来看看unstack的效果

df = PlantGrowth unstacked_df = unstack(df) unstacked_df

结果如下,因为这里ctrl,trt1和trt2中的样本刚好都是10个,所以这里结果看上去还像是一个数据框,但是当group这个分组变量里面,每组的数目不一样的时候,你就会发现结果其实是一个列表。

   ctrl trt1 trt21  4.17 4.81 6.312  5.58 4.17 5.123  5.18 4.41 5.544  6.11 3.59 5.505  4.50 5.87 5.376  4.61 3.83 5.297  5.17 6.03 4.928  4.53 4.89 6.159  5.33 4.32 5.8010 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 group1    4.17 ctrl2    5.58 ctrl3    5.18 ctrl4    6.11 ctrl5    4.50 ctrl6    4.61 ctrl7    5.17 ctrl8    4.53 ctrl9    5.33 ctrl10   5.14 ctrl11   4.81 trt112   4.17 trt113   4.41 trt114   3.59 trt115   5.87 trt116   3.83 trt117   6.03 trt118   4.89 trt119   4.32 trt120   4.69 trt121   6.31 trt222   5.12 trt223   5.54 trt224   5.50 trt225   5.37 trt226   5.29 trt227   4.92 trt228   6.15 trt229   5.80 trt230   5.26 trt2
在使用stack函数的时候,也可以对组进行操作,比如筛选和过滤
stacked_df1 = stack(unstacked_df, select = -ctrl) stacked_df1
这段代码就在stack的时候去掉了ctrl组,得到的结果如下,就只剩下trt1和trt2这两个组了。
   values  ind1    4.81 trt12    4.17 trt13    4.41 trt14    3.59 trt15    5.87 trt16    3.83 trt17    6.03 trt18    4.89 trt19    4.32 trt110   4.69 trt111   6.31 trt212   5.12 trt213   5.54 trt214   5.50 trt215   5.37 trt216   5.29 trt217   4.92 trt218   6.15 trt219   5.80 trt220   5.26 trt2
今天的理论部分就先分享到这里,后面小编会使用这两个函数来给大家举个真实的应用案例,敬请期待。
生物信息学

TCGA数据挖掘:Xena - TCGA数据下载

2020-9-1 16:05:51

生物信息学

gff文件转换成gtf文件

2020-9-30 22:49:56

加入Q群
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索