tidyr带你搞定长宽格式转换






tidyr带你搞定长宽格式转换

小师妹  生信果  2023-08-22 19:00:12

点击蓝字,关注我们

对于数据进行处理,筛选出想要的数据,对于生物信息的分析来说,是很重要的。小果最近处理数据时,刚好碰到长格式和宽格式的转换,苦恼之际,好在恰好发现有tidyr包正好帮我解决了这个问题。那么现在就让我来带大家入门tidyr包的基本操作吧!

一、tidyr包是什么?

tidyr 是 R 语言中一个数据处理的包,它提供了用于整理数据(即数据清洗和重塑)的函数,特别是在数据规整方面非常强大。tidyr 中的主要函数包括 gather() 和 spread() 用于数据”长”宽表的转换; separate() 和 unite() 用于将一列数据拆为多列或者将多列合并为一列。tidyr 的函数可以方便地将数据整理成适合进行后续分析的长格式或者宽格式。在生物信息学中,我们常常需要将数据从宽格式转换成长格式进行分析,或者反过来进行展示数据。

二、tidyr包中的基本操作

1.  导入数据和加载tidyr包

首先我们先创建一个包含了 4 个基因的表达或计数数据的数据框,其中每个基因有三个样本的数据。其中geneid 是数据框中的一列,包含了四个基因的名称,可以看到这些基因分别被命名为 gene1、gene2、gene3、gene4。而sample1、sample2、sample3 是数据框中的另外三列,分别包含了这四个基因在不同情况下的表达或计数数据。

#导入tidyr包library(tidyr)#data.frame() 函数创建了一个数据框test <- data.frame(geneid = paste0("gene",1:4),                   sample1 = c(1,3,9,10),                   sample2 = c(2,6,2.7,15),                   sample3 = c(0.2,4,6,14))

以下为我们创建的基因数据框的展示:

2. gather()和spread()函数

在数据分析的过程中,我们经常需要进行数据格式的转换,gather() 和 spread() 函数提供了快速、方便的数据格式转换功能,使数据的整理和分析变得更加高效。gather() 函数用于将宽数据格式(wide format)转换为长数据格式(long format),即把数据从宽表格中转换成长表格中。它将原数据框中的多列变成一列,并提取出变量所对应的值。下面来看看应用吧!

test_gather <- gather(data = test, #指定数据                    key = sample_nm, #将合并后的列取一个列名                    value = exp, #合并后的列所包含的数值                    - geneid) #- geneid表示将geneid列保留不合并转换之后的结果为

而spread() 函数与 gather() 函数相反,它将长数据格式转换为宽数据格式。

test_re <- spread(data = test_gather, #指定数据 key = sample_nm, #将合并后的列取一个列名 value = exp) #合并后的列所包含的数值

转换之后我们可以得到的数据为:

3. separate()和unite()函数

在数据清洗、整合的过程中,separate() 和 unite() 可以帮助我们快速实现数据拆分和合并,尤其在处理文本数据时非常实用。separate() 函数用于将数据框中的一列拆分成多列,将某一列的数据按照指定的分隔符分隔为新的列,且每个新列的命名和位置可以指定。下面来看看举例吧!

test <- data.frame(x = c( "a,b", "a,d", "b,c")) #生成加载数据testtest_seprate <- separate(test, #待处理的数据框                        x, #待分割的列,这里是已经存在的列,不加引号                        c("X", "Y"), #分割后的列名,注意加引号,是字符                        sep = ",") #指定分割符test_seprate我们可以首先加载test 的数据框,该数据框包含了一列 x,其中包含了三个字符串值 "a,b""a,d""b,c"。所得结果如下:
test_separate 是一个新的数据框,由原来的 test 数据框使用 separate() 函数操作生成的。separate() 函数将原数据框中的 x 列按照逗号 , 进行拆分,生成了两列新的数据。所得结果如下:

紧接着,我们来看看unite()函数的使用吧!unite() 函数是 tidyr 包中的一个函数,用于将多列数据合并成一列,并用指定的分隔符进行分隔。常用于将表格中的多个列进行组合。举个例子来看看吧!

test_re <- unite(test_seprate, #待处理的数据框 "x", #合并后的列的列名,现在不存在的,注意加引号 X,Y, #待合并的列,不加引号 sep = ",") #指定合并后的连接符 test_re使用 unite() 函数将数据框 test_separate 中的 X 列和 Y 列合并成一列,新列的名称为 x,合并后的连接符为 ,。以上代码的结果如下:

通过学习,相信大家对tidyr包有了更为深入的了解了吧!那么接下来,自己也可以通过以上的代码去锻炼锻炼,相信结合了小果的讲解,也会理解得更好!如果大家对R包等感兴趣的话,还可以登录http://www.biocloudservice.com/home.html进行学习!

1

END

1