R语言学习系列之separate {tidyr}
separate {tidyr}的功能是使用正则表达式分隔符将字符列分隔成多个列。给定正则表达式或字符位置向量,separate()将单个字符列转换为多个列。这个功能在生信分析中用到的频率太多了,比如TCGA的基因ID转换中ENSG00000000003.13转换成ENSG00000000003,比如对TCGA样本的ID切割等等。
下面我们来学习一下这个函数
用法
separate(data, col, into, sep = "[^[:alnum:]]+", remove = TRUE, convert = FALSE, extra = "warn", fill = "warn", ...)
加载包,创建数据
rm(list = ls())#一键清空
library(tidyr)
library(dplyr)
df <- data.frame(x = c(NA, "a.b", "a.d", "b.c"))
df
简单分割
#df表示分割对象,x表示对x这一列进行分割,“A”,“B”表示分割成A B两列
separate(df,x, c("A", "B"))
如果你只想要第二个变量
separate(df,x, c(NA, "B"))
如果每一行没有分成相同数量的片段,使用extra和fill参数来控制
df <- data.frame(x = c("a", "a b", "a b c", NA))
df
separate(df,x, c("a", "b"))
这里就丢失了c
下面代码同样的行为会降低c,但没有警告
separate(df,x, c("a", "b"), extra = "drop", fill = "right")
没有警告,因为是我们主动抛弃c的,fill = "right"表示在右边填充缺失值缺失值,fill = "left"表示在左边填充缺失值
separate(df,x, c("a", "b"), extra = "drop", fill = "left")
还可以选择合并
separate(df,x, c("a", "b"), extra = "merge", fill = "left")
或者分割成三列
separate(df,x, c("a", "b","c"))
如果只想拆分指定的次数,就使用extra=“merge”
df <- data.frame(x = c("x: 123", "y: error: 7"))
df
可以看到第二行有两个“:”
separate(df,x, c("key", "value"), ": ", extra = "merge")#用“: ”符号来分割
如果不加extra = "merge"
separate(df,x, c("key", "value"), ": ")
7这个数字就不见了
利用convert = TRUE可以自动检测对象的类型
df <- data.frame(x = c("a:1", "a:2", "c:4", "d", NA))
df
a=separate(df,x, c("key","value"), ":")
a
str(a)
这样分割的结果,数字不再是数字了,变成了字符了
b=separate(df,x, c("key","value"), ":", convert = TRUE)
b
str(b)
保留了数字型向量的格式
TCGA实操
下面我们来实际操作一下
导入xena数据库下载的TCGA-LIHC count数据(所有肿瘤TCGA数据在文末可以拿到)
rm(list = ls())#一键清空
library(tidyr)
library(dplyr)
LIHCdata=read.table("TCGA-LIHC.htseq_counts.tsv",header=T,sep='\t')
LIHCdata[1:4,1:4]
去掉ensemble ID的点号
LIHCdata1<-separate(LIHCdata,Ensembl_ID,into = c("Ensembl_ID"),sep="\\.")
LIHCdata1[1:4,1:4]
后面就可以进行ID转换了,这个我们放到TCGA数据分析系列讲。好了,separate这个函数我们就讲到这里。
另外,最近收集了一些很好的资源,想分享给大家,顺便能涨一些粉,主要有
1. 19年中标的各门类国自然题目汇总,以及17年的国自然汇总,部分含摘要!
2. R语言学习书籍
R语言实战(中文完整版)
R数据科学(中文完整版)
ggplot2:数据分析与图形艺术
30分钟学会ggplot2
3. TCGA数据整理
前期从https://xenabrowser.net/datapages/ (UCSC Xena)数据库下载的TCGA数据,传到了百度云上备份。
感兴趣的话,转发朋友圈或者100人以上的微信群,截图发到公众号,即可获取全部资源的百度云链接,链接7天有效,希望大家赶紧下载。你们的支持是我前进的动力,感谢。