R之基本数据整理
#安装咱们要使用的包
install.packages("dplyr")
library(dplyr)
setwd("L:/R语言学习/R语言学习流程/R语言数据整理")
# 读入实验设计和Alpha多样性值
design =read.table("map_lxdjhg.txt", header=T, row.names= 1,sep="\t")
data("iris")
head(design)
首先,我们来看数据结构中储存了写什么?R中对象的5种基本类型:
字符(character)
逻辑(logical:True/False)
数值(numeric:real numbers)
整数(integer)(这种数据格式和numeric很相似,一个是整数,一个数值,两者在R语言中应该一样吧)
复数(complex)(我们不经常见到这种数据)
当然R是不会主动告诉你这个对象是一种什么类型,采用下面命令查看:class(),示例如下:
R语言学习流程/R语言数据整理")
# 读入实验设计
design =read.table("map_lxdjhg.txt", header=T, row.names= 1,sep="\t")
data("iris")
class(design$BarcodeSequence)
#这里我们并没有数值形式的数据,添加一列
design$wt=c(1:63)
#这里数据类型是整数型的
class(design$wt)
#通过下面命令更改为数值(numeric:real numbers)
design$wt<-as.double(design$wt)
class(design$wt)
#当然可以改回去,目前两者区别没有看到
design$wt<-as.integer(design$wt)
运行窗口:
其次我们来看看R语言中的几种数据结构:
向量:储存数值(正负数,是否有小数点,都可以),逻辑(就是T、F,也可以写上全称,R认得),字符型变量(任意字母),只能储存一种基本数据类型,后两种数据类型元素必须加上双引号才可以:
基本结构:wt<-c()
矩阵:是一个二维数组,任然是每个元素拥有相同的数据类型,通过matrix()创建:
#我们导入的数据格式基本上都是data.frame
str(design)
#这里将数据框转化为矩阵类型,发现将最后一列数值型数据转化为字符型了
as.matrix(design)
#这里将转化后的矩阵赋值给一个变量,不然只会输出在面板上,不会储存:
wt2<-as.matrix(design)
str(wt2)
第一行树填充矩阵的元素,三四行就是行和列名,和数据框是完全不一样的,为什么要强调分辨这两种数据储存形式呢,因为之后讲的数据类型变换,将限定数据类型:
对矩阵的取舍:
m[x,y]
x:代表矩阵行,可以根据行号选择,如果想选择多行,则使用c(j:k)来选择一段区间
y:代表矩阵列,可以根据列号选择,如果想选择多列,则使用c(j:k)来选择一段区间
这个很有用,比如:
我要做相关性分析,一般是长这样的,行列都一样,对这个图形的简化也无非是对角线减一半,但是这样占空间还是一样:
#做相关的R包
library("corrplot")
#使用R自带数据
data(mtcars)
#求相关
#保留小数点,方便放到图上
round(mcor,digits= 2)
#出图
corrplot(mcor)
这里通过这样的操作:
#corr.test函数的包
library(psych)
#进入工作目录,导入数据
setwd("E:/Shared_Folder/HG_usearch_HG/16s功能预测_usearch/相关lefse个edgr差异和代谢通路相关")
wt =read.table("GF5.txt", header=T,sep="\t",check.names=F)
# corr.test求相关性矩阵,可以检测显著性,所以我使用这个函数
occor =corr.test(wt,use="pairwise",method="spearman",adjust="fdr",alpha=.05)
occor.r =occor$r # 取相关性矩阵R值
occor.p =occor$p # 取相关性矩阵p值
#这里我将不显著的改为0
occor.r[occor.p>0.05]= 0
#我是通过将otu和通路分别放到两个坐标轴实现图形空间的压缩
wt3<-occor.r[c(1:10),c(11:16)]
corrplot(wt3,cl.cex= 0.8,tl.cex = 0.5,tl.srt = 45,)
运行界面:
#图形界面:
演示到此结束。
ⅲ. 数据框:弥补矩阵不足,不同的列可以储存不同模式的数据,当然,这就是咱们经常使用的数据存储形式:
通过data.frame()创建
也可以通过[]提取需要的列
#提取前两列
design[1:2]
#提取对应名字的列
design[c("LinkerPrimerSequence","BarcodeSequence")]
#提取一列,但是这样不会按照数据框形式显示一列数据,会将其排列,并给出Levels
wt4<-design$SampleType
str(wt4)
wt4<-design[c("SampleType")]
str(wt4)
运行界面,之后我们会经常使用$符号提取数据框,所以这里将一下两者:
与数据框有关的还有这个:实例标识符,在R中为行名(rownames),就是对应一列的变量名;
这里我们开始使用数据管理神包整理数据啦:
#这里通过对数据整理,因此,我读入alpla多样性数据
alpha =read.table("alpha8825.txt", header=T, row.names= 1,sep="\t")
head(alpha)
# 添加一个新的列he,为对应值加和
alpha1<-mutate(alpha, he =shannon+chao1)
# 变量名称包含o的变量
alpha1<-select(alpha, contains("o"))
是否可以做到选择同时包含多个元素的向量?到这里,我们会产生想法,经常我们的otu表格是很多处理一起的,我们并不会在同一个时间,需要所有数据,这个时候选择自己需要的数据十分重要,我使用正则表达式来达到这一个要求:
#改变工作目录,导入数据
setwd("E:/Shared_Folder/HG_usearch_HG")
otutable =read.table("otu_table.txt", header=T, row.names= 1,sep="\t")
#提取列名
WT5<-colnames(otutable)
#使用grep函数选择需要的列名,“|”符号表示或者的含义
c=grep("GF1|GC1|GF5|GC5",WT5)
wt6<-otutable[c]
这个包有这种方式筛选,把需要的变量赋值给vars,然后用one_of模式筛选,但是需要一个一个输入需要的列名,,目前还不知道这个包会不会有更加方便的方法,继续学!
vars<-c("observed_otus", "PD_whole_tree")
df_select<-select(alpha, one_of(vars))
学习永无止境,分享永不停息!
这里插播一条消息:
周六的留言,我忘记看了过了24小时,就无法单独回过去消息了,我将回复内容粘贴至此:
之前我没有查看消息,不好意思:
你是做pcoa分析对吧?
首先这个值需要自己提取并且自己计算每个坐标轴的得分的,并不是直接就有的
pcoa = cmdscale(bray_curtis, k=2, eig=T)#后面的eig就是你需要的得分
eig = pcoa$eig#提取出来
#通过这个正则表达式计算得分值,并通过labs函数赋给x,y轴标签(通过ggplot出图)
ggplot(points, aes(x=wt, y=hl, color=SampleType)) + geom_point(alpha=.6, size=1.5) +labs(x=paste("PCoA 1 (", format(100 * eig[1] / sum(eig), digits=3), "%)", sep=""), y=paste("PCoA 2 (", format(100 * eig[2] / sum(eig), digits=3), "%)", sep=""),
祝好