参考文章:(参见各标题链接)
老菜鸟最近进入了R的学习中,看的书籍用不上,使用时候还得满网到处去搜集各种说明,唉,累啊,写个R中各种命令的说明,方便自己查找学习吧。
1. 提取不同列的内容组成新变量——常用于分组信息的设置
#提取指定列的内容
#对数据中的Gene.ID和FPKM两列数据进行提取
m3108.FPKM <- m3108.gene.tab[,c(1,8)]
2. 重命名指定列名
#重命名全部的列
names(data) <- c("NO","name")
#重命名单个列
colnames(data)[2] <- "newname"
3. 将第一列作为文件的行名
rownames(gene) <- gene[,1]
gene <-gene[,-1]
4. 合并两个有相同行名的文件
#merge函数每次合并2个文件,by来定义指定的参考行
group_control <- merge(m3108.FPKM, m3111.FPKM, by = "Gene.ID")
5. 提取大于小于某一数据的数据
#对数据进行过滤、提取
significant_padj_different_genes <- subset(all_different_genes, padj < 0.05 & abs(log2FoldChange) > 1)
#提取显著上升的相关数据
significant_up_genes <- subset(significant_padj_different_genes, log2FoldChange > 1 )
6. 在数据中某一列添加固定字符
# 对第一列加入chr几个字符
# 利用for循环,对BED_up_genes数据框中的第1列中的进行编辑
for (i in 1:nrow(BED_up_genes)){
BED_up_genes$chr[i] <- paste("chr", BED_up_genes$gene_chr[i], sep="" )
}
7. write.table()函数用法
Usage
write.table(x, file = "", append = FALSE, quote = TRUE, sep = "\t",
eol = "\n", na = "NA", dec = ".", row.names = TRUE,
col.names = TRUE, qmethod = c("escape", "double"),
fileEncoding = "")
write.csv(...)
write.csv2(...)
参数说明:
8. read.table()函数用法
read.table(file, header = FALSE, sep = "\t", quote = ""'"",
dec = ".", row.names, col.names,
as.is = !stringsAsFactors,
na.strings = "NA", colClasses = NA, nrows = -1,
skip = 0, check.names = TRUE, fill = !blank.lines.skip,
strip.white = FALSE, blank.lines.skip = TRUE,
comment.char = "#",
allowEscapes = FALSE, flush = FALSE,
stringsAsFactors = default.stringsAsFactors(),
fileEncoding = "", encoding = "unknown")
参数说明:
读入数据其他相关函数:
9. match()函数用法:1、2
match:匹配两个向量,返回x中存在的返回索引或TRUE、FALSE。match函数是一个完全匹配函数, 当两个元素类型不一样时, 如果进行类型转换后匹配得上的话, 则仍可匹配。两个向量数量必须一致
# match函数使用格式有如下两种:
# 第一种方便设置参数,返回x中元素在table中的位置
match(x, table, nomatch = NA_integer_, incomparables = NULL)
# 第二种简洁,返回x中每个元素在table中是否存在
x %in% table
参数详解
10.交集intersect、并集union、找不同setdiff、判断相同setequal
在R语言进行数据分析时,经常需要找不同组间的相同和不同,那你应该掌握如下几个函数,让你事半功倍。
# 两个数值向量取交集
intersect(x=1:4, y = 2:6)
# [1] 2 3 4
# 两个字符向量取交集
intersect(x=letters[1:4], y = letters[2:6])
# [1] "b" "c" "d"
# 混合向量
intersect(x=c("a", "b", "c", 4), y = c("a", 2, 3, 4))
[1] "a" "4"
# 两个数值向量取并集
union(x=1:4, y = 2:6)
# [1] 1 2 3 4 5 6
# 两个字符向量取并集
union(x=letters[1:4], y = letters[2:6])
# [1] "a" "b" "c" "d" "e" "f"
# 混合向量
union(x=c("a", "b", "c", 4), y = c("a", 2, 3, 4))
[1] "a" "b" "c" "4" "2" "3"
x = 1:4
y = 2:6
# 找x中不同于y的元素
setdiff(x, y)
# [1] 1
# 找y中不同于x的元素
setdiff(y, x)
# [1] 5 6
x = 1:4
y = 2:6
# 判断x与y是否相同,结果为假
setequal(x, y)
# [1] FALSE
# 找y与x是否相同,结果为假
setequal(y, x)
# [1] FALSE
# 只有完全相同的才返回TRUE
y = 1:4
setequal(x, y)
# [1] TRUE
11.利用biomaRt包对基因类型进行转换、注释
鼠源gene_id转换为gene_symbol,再转化为人源gene_symbol
参考文章:biomaRt:基因类型转换R包使用、ID转换—小鼠ID同源转化到人
# 构建待处理基因集的向量
# 设置读取文件目录
setwd("G:/xiaxianyou/RNA-seq/2020_09_28/Rtreatment/GSEA/")
# 读取文件
genes <- read.csv("G:/caolei/All_samples.GeneExpression.FPKM.csv", header = TRUE)
# 将待处理的基因一列构建为向量
genes_V1 <- genes[, 1]
genes_V1 = as.vector(genes_V1$X)
# 鼠源gene_id转化为gene_symbol
# 加载R包
library("clusterProfiler")
# 加载注释包
library("org.Mm.eg.db")
genes_V2 <- bitr(genes_V1, # 输入待处理的gene_id
fromType = "ENTREZID", # fromType是指你的数据ID类型是属于哪一类的
toType = "SYMBOL", # toType是指你要转换成哪种ID类型,可以写多种,也可以只写一种
OrgDb = org.Mm.eg.db) # Orgdb是指对应的注释包是哪个
# 相同gene_symbol由鼠源转化为人源
# 加载biomaRt包
library("biomaRt")
# 选择目标数据库和数据集,这里选择人和小鼠的
# useMart一般后面跟两个参数
# 第一个参数是借助ensemble数据库
# 第二个参数是告诉选择哪个物种的数据集
human = useMart("ensembl", dataset = "hsapiens_gene_ensembl")
mouse = useMart("ensembl", dataset = "mmusculus_gene_ensembl")
genes_V3 = getLDS(attributes = c("mgi_symbol"), # 输入数据集的属性参数,此处为鼠源symbol
filters = "mgi_symbol", # 输入数据集在查询中使用的参数过滤器,同上为鼠源symbol
values = genes_V1 , # 输入的数据集,即待处理的gene_symbol向量集
mart = mouse, # 输入数据的Mart对象,鼠源即mouse
attributesL = c("hgnc_symbol"),# 输出数据集的属性参数,此处为人源symbol
martL = human, # 输出数据的Mart对象,人源即human
uniqueRows=T) # 单独一行进行输出
# 查看转化后的结果
View(genes_V2)
View(genes_V3)
# 将人源gene_symbol、鼠源gene_symbol和鼠源gene_id文件合并
#更改列名称进行合并文件
colnames(genes_V3)[1] <- "SYMBOL"
#合并转化后的文件
genes_V4 <- merge(genes_V2, genes_V3, by = "SYMBOL")
# 将转化后的文件与原始文件合并
#更改列名称进行合并文件
colnames(genes_V4)[2] <- "gene_id"
#合并转化后的文件
genes_V5 <- merge(genes_V4, genes, by = "gene_id")
#对结果进行输出保存
write.table(genes_5, "G:/caolei/All_samples.GeneExpression.FPKM_1.xls", row.names = FALSE, quote = FALSE, sep = "\t")
12. 对给定基因进行注释
参考文章:R包biomaRt: 转换ID、注释基因、GO通路
#对数据进行注释
GSE117163_H9N2 <- read.csv("E:/Rstudio/zhanghuixia/GSE117163_All_Counts.txt/GSE117163_H9N2.csv")
###重命名指定列
###重命名全部的列是name(data) <- c("NO","name")
###重命名单个列是colnames(data)[2] <- 'newname'
colnames(GSE117163_H9N2)[1] <-"SYMBOL"
# 将待处理的基因一列构建为向量
genes_V1 <- GSE117163_H9N2[, 1]
genes_V1 = as.vector(genes_V1)
# 鼠源gene_id转化为gene_symbol
my_mart <-useMart("ensembl")
datasets <- listDatasets(my_mart)
View(datasets)
# 加载R包
# BiocManager::install("clusterProfiler")
library("clusterProfiler")
# BiocManager::install("biomaRt")
# 加载注释包
# BiocManager::install("org.Gg.eg.db")
library("org.Gg.eg.db")
genes_V2 <- bitr(genes_V1, # 输入待处理的gene_id
fromType = "SYMBOL", # fromType是指你的数据ID类型是属于哪一类的
toType = "ENSEMBL", # toType是指你要转换成哪种ID类型,可以写多种,也可以只写一种
OrgDb = org.Gg.eg.db) # Orgdb是指对应的注释包是哪个
# 'toType' should be one of ACCNUM, ALIAS, ENSEMBL, ENSEMBLPROT, ENSEMBLTRANS, ENTREZID, ENZYME, EVIDENCE, EVIDENCEALL, GENENAME, GENETYPE, GO, GOALL, IPI, ONTOLOGY, ONTOLOGYALL, PATH, PFAM, PMID, PROSITE, REFSEQ, SYMBOL, UNIPROT.
# 加载biomaRt包
library("biomaRt")
# BiocManager::install("curl")
library("curl")
# 选择目标数据库和数据集,这里选择人和小鼠的
# useMart一般后面跟两个参数
# 第一个参数是借助ensemble数据库
# 第二个参数是告诉选择哪个物种的数据集
Gallus= useMart("ensembl", dataset = "ggallus_gene_ensembl")
genes_V3 = getBM(attributes = c("ensembl_gene_id","external_gene_name","description"),
filters = "ensembl_gene_id",
values = genes_V2$ENSEMBL,
mart = Gallus,
uniqueRows=T)
# 将转化后的文件与原始文件合并
#更改列名称进行合并文件
colnames(genes_V3)[1] <- "ENSEMBL"
#合并转化后的文件
genes_V4 <- merge(genes_V2, genes_V3, by = "ENSEMBL")
genes_V5 <- merge(genes_V4, GSE117163_H9N2,by = "SYMBOL")
#对显著差异基因进行输出保存
write.csv(genes_V5, file = "E:/Rstudio/zhanghuixia/GSE117163_All_Counts.txt/GSE117163_H9N2_discription.csv")
13.对某一列重复名进行拆分
例如,gene_count文件中第一列gene_id名称重复,两个名称以“|”相隔,对其进行拆分以去除重复名称。
library(stringr)
# 设置空的"gene_count_V1"向量,其行数与待处理数据行数一致
gene_count_V1<-rep(NA,nrow(gene_count))
# 利用for循环,对gene_count数据框中的重复列(第一列gene_id)进行拆分提取
for (i in 1:nrow(gene_count)){
gene_count_V1[i] <- unlist(str_split(gene_count[i,1], pattern = "\\|"))[1]
}
# 对原数据框中的特定序列重新赋值
gene_count$gene_id <- gene_count_V1
# 显示文件的前6行信息
head(gene_count)
14.对某一列中某个位置的字符进行删除
此处以结尾最后一个字符为例,采用nchar()函数对字符串进行计数后减一,来代表最后一个字符。
# 设置空的"hg19_genes_gtf_V1"向量,其行数与待处理数据行数一致
# 此处NA可以用0代替
hg19_genes_gtf_V5<-rep(NA,nrow(hg19_genes_gtf))
# 利用for循环,对hg19_genes_gtf数据框中的第13列中的分号进行剔除,采用去掉末尾字符的方法
for (i in 1:nrow(hg19_genes_gtf)){
hg19_genes_gtf_V5[i] <- substring(hg19_genes_gtf[i,13], 1, (nchar(as.character(hg19_genes_gtf[i,13]))-1))
}
# 将编辑后的数值合并至原数据框中的特定序列
hg19_genes_gtf <- cbind(hg19_genes_gtf, hg19_genes_gtf_V5)
15.对某一列中某个位置的字符进行删除
此处以结尾最后一个字符为例,采用nchar()函数对字符串进行计数后减一,来代表最后一个字符。
# 设置空的"hg19_genes_gtf_V1"向量,其行数与待处理数据行数一致
# 此处NA可以用0代替
hg19_genes_gtf_V5<-rep(NA,nrow(hg19_genes_gtf))
# 利用for循环,对hg19_genes_gtf数据框中的第13列中的分号进行剔除,采用去掉末尾字符的方法
for (i in 1:nrow(hg19_genes_gtf)){
hg19_genes_gtf_V5[i] <- substring(hg19_genes_gtf[i,13], 1, (nchar(as.character(hg19_genes_gtf[i,13]))-1))
}
# 将编辑后的数值合并至原数据框中的特定序列
hg19_genes_gtf <- cbind(hg19_genes_gtf, hg19_genes_gtf_V5)
16.利用if语句对数据进行判断后,利用max/min函数对数据进行提取
此处提取正负链DNA中对应的TSS数值为例,其中,正链DNA的基因TSS为较小数值,负链DNA的基因TSS为较大数值。
# 对于strand -的基因,TSS为较大的数值,对其进行提取
# 设置空的"hg19_genes_gtf_pick_V6"向量,其行数与待处理数据行数一致
hg19_genes_gtf_pick_V6<-rep(0,nrow(hg19_genes_gtf_pick))
hg19_genes_gtf_pick_V7<-rep(0,nrow(hg19_genes_gtf_pick))
# 利用for循环,对hg19_genes_gtf_pick数据框中的两列中的数值进行筛选提取,采用max()/min()函数
for (i in 1:nrow(hg19_genes_gtf_pick)){
if (hg19_genes_gtf_pick[i,4] == "-")
hg19_genes_gtf_pick_V6[i] <- max(hg19_genes_gtf_pick[i,2], hg19_genes_gtf_pick[i,3])
else
hg19_genes_gtf_pick_V7[i] <- min(hg19_genes_gtf_pick[i,2], hg19_genes_gtf_pick[i,3])
}
# 对原数据框中的特定序列重新赋值
hg19_genes_gtf_pick <- cbind(hg19_genes_gtf_pick, hg19_genes_gtf_pick_V6, hg19_genes_gtf_pick_V7)
# 对数据进一步合并处理
hg19_genes_gtf_pick$V8 <- cbind(hg19_genes_gtf_pick$hg19_genes_gtf_pick_V6 + hg19_genes_gtf_pick_V7)