前情提要:希望一天一个part
part two是part one的实战部分
目录
1.Hallmarkers名称转换
目的:把hallmarker的term变得可读(变短)
代码一
library(tidyverse)
load(file = "data/hallmarks_gene_set.Rdata")
hallmarks$term
term <- str_split(hallmarks$term,"_",simplify = T)[,-1]
term = Hmisc::capitalize(tolower(term))
for (i in 1:dim(term)[1]) {
print(i)
hallmarks$new_term[i] <- paste0(term[i,],collapse = " ")
}
table(hallmarks$new_term)
这里有一个点:paste0函数 的 collapse参数
paste0(term[1,],collapse = "_")
[1] "Tnfa_Signaling_Via_Nfkb"
paste0(term[1,],"_")
[1] "Tnfa_" "Signaling_" "Via_" "Nfkb_"
实际上如果不输入collapse,那么省略的默认参数是sep=
paste0(term[1,],sep = "_")
[1] "Tnfa_" "Signaling_" "Via_" "Nfkb_"
默认的情况下,paste的sep是空格,而paste0则取消了空格;也是两个函数的重要区别
> paste0(term[1,],"test")
[1] "Tnfatest" "Signalingtest" "Viatest" "Nfkbtest"
> paste(term[1,],"test")
[1] "Tnfa test" "Signaling test" "Via test" "Nfkb test"
那么体会一下sep和collapse的区别,参考文章认真聊一聊R语言中的paste/paste0函数 - 简书
一个是叠加 一个是 压缩
paste0(term[1,],collapse ="test")
[1] "TnfatestSignalingtestViatestNfkb"
> paste0(term[1,],sep = "test")
[1] "Tnfatest" "Signalingtest" "Viatest" "Nfkbtest"
个人更倾向于使用paste0,总体更好用
此外要注意结果里其实有许多空格,目前的处理只是方便阅读,但如果要引用的话,还是要注意字符串包含的内容
再关注一下大小写的转换:
term = Hmisc::capitalize(tolower(term))
还可以用于人鼠基因的转变
果子代码
### 第三个例子: 批量名称转换
rm(list = ls())
load(file = "data/hallmarks_gene_set.Rdata")
### 1.首先确定框架,我们想重复的操作是什么?
### 2.单次操作应该如何做
### 3.如何用R语言实现单次的需求
term = as.character(hallmarks$term[1])
### 1.裂解
term = unlist(strsplit(term, split="_", fixed=T))[-1]
### 2.大写变小写,然后再首字母大写
term = Hmisc::capitalize(tolower(term))
### 3.空格连接
term = paste(term, collapse=" ")
term
### 容器已经存在,直接批量循环输出
hallmarks$term <- as.character(hallmarks$term)
for(i in 1:nrow(hallmarks)){
print(i)
term = hallmarks$term[i]
### 1.裂解
term = unlist(strsplit(term, split="_", fixed=T))[-1]
### 2.大写变小写,然后再首字母大写
term = Hmisc::capitalize(tolower(term))
### 3.空格连接
term = paste(term, collapse=" ")
### 4.数据导出
hallmarks$term[i] = term
}
table(hallmarks$term)
避免了空格现象的发生
unlist函数和simplify参数
关键在于他的代码是一行一行操作,unlist可以直接变list为字符串,而仅仅使用simplify参数,返回一个矩阵,矩阵就必然有""存在,在连接时就会连上空格。还是老师的代码简洁明了。
2.查看富集分析的基因重复情况
tips:要关注基因的情况
富集分析里面会出来很多通路,在关注通路的同时,也可以看到一些看起来异常的通路为什么会在这里出现富集----因为有特殊的基因
果子代码
### 第四个例子:
### 统计这些基因在显著富集通路中的次数
##############################################################
rm(list = ls())
load(file = "data/symbolKEGG.Rdata")
library(clusterProfiler)
dotplot(symboldata)
barplot(symboldata)
### 转换为数据框
symboldata <- as.data.frame(symboldata )
### 1.首先确定框架,我们想重复的操作是什么?
### 2.单次操作应该如何做
### 3.如何用R语言实现单次的需求
### 修改其中一个
test = symboldata$geneID[1]
test
### 需要裂解
unlist(strsplit(test,split = "/"))
### 1.创建容器,此处是向量
splitvector <- c()
### 2.循环操作导出到容器
for(i in 1:length(symboldata$geneID)){
print(i)
new = unlist(strsplit(symboldata$geneID[i],split = "/"))
splitvector = c(splitvector,new)
}
### 统计频次
table(splitvector)
### 排序
sortdata = sort(table(splitvector),decreasing = T)
### 成数据框来查看
test <- as.data.frame(sortdata)
总结:
tale不仅可以统计频次,还可以排序!
在循环中用c()使得向量不断延长
如需测试数据,请发邮件至yunbk@mail2.sysu.edu.cn