万地高楼平地起,掌握基本的代码规律和逻辑思维非常重要
每个基本的代码和函数不运行是200次以上,是谈不上掌握的
基本开始运行代码
rm(list=ls())
options(stringsAsFactors = F)
tips
Tab键匹配补全
head(b)取b的前6行,同样有tail()取末6行
基本数据类型
R 有四种基本数据类型,即数值型(numeric)、复数型(complex)、逻辑型(logical)、字符型(character),因子(factor)。
numeric:就是数字【需要注意的是有的虽然看起来是数字,但是被定义成了character或者factor,需要用as.numeric转换】
character:用单引号或者双引号包括起来的字符序列,一般我们称之为字符串。
logical:逻辑型变量,即布尔值,表示“是”与“否”,“真”或“假”。
逻辑型用 TRUE 表示真,FALSE 表示假。也可缩写为 T或者 F,
但需要注意的是,T 和 F不是 R 的保留字,其含义可以被程序改变,因此最好是用 TRUE 和 FALSE,更加规范和安全。
R中的比较运算和逻辑运算都可以产生逻辑型数据。比较运算包括 >,<,>=,<=,==,!=(大于,小于,大于等于,小于等于,等于,不等于)。
逻辑运算包括 &,|,!(与、或、非)。
> 2>3
[1] FALSE
> a=seq(1,20)
> 8>a
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[17] FALSE FALSE FALSE FALSE
factor:应该是最难理解的一个变量类型
在R语言中,因子(factor)可以表示的是一个符号、一个编号或者一个等级,即,一个点。例如,人的个数可以是1,2,3,4......那么因子就包括,1,2,3,4.....
还有统计量的水平的时候用到的高、中、低,也是因子,因为他是一个点。
与之区别的向量,是一个连续性的值,例如,数值中有1,1.1,1.2......可以作为数值来计算,而因子则不可以。
sex<-c("M","F","M","M","F")
factor(sex)
sex.factor<-as.factor(sex)
#使用levels来取得因子中的水平
levels(sex.factor)
# [1] "F" "M"
不太好理解,新手刚开始不太用的上,我现在也不太理解factor,应该是比character多了半个维度的感觉
基本数据结构
无论是数值型(numeric)、逻辑型(logical)、字符型(character),因子(factor)变量都需要用容易来存储,也就是数据结构
R的对象由几种基本数据类型构成:
向量(vector) :一维空间
矩阵(matrix):二维空间,只可以存储数值变量,但是较少用到,
数据框(dataframe):二维空间,可以存储numeric,logical,character,factor型变量,在实际分析工作中用到的最多
数组(array):三维空间,但是极少用到,可以忽略
列表(list):三维空间,可以由多个vactor/matrix/dataframe组成
基本计算
R中可以直接进行基本计算
【每一个英文单词都是一个函数】
【基本所有的计算符号都可以在R中进行直接计算】
6+6
6-6
6*6
6/6
6^2
log(6)
mean()
max()
min(x)
创建向量
c( ) 是我们常用来创建向量的函数,c就是create,也可以理解为combind
c("TP53","ERBB2","BRCA1")
c(2,3,4)
c(2:9)
seq(1,3)#默认为整数1
seq(1,3,by=0.5)
a=c(3,4,5,6,7,8),等价于a=3:8或者a=c(3:8)或者a=seq(3,8)
【R中没有唯一的解决代码方案,条条大路通罗马,找出规律,构建个人的思维习惯才是王道】
rep就是replicate重复的意思
rep(1,3)# 【1重复3次】
rep(1:2,3) #【1和2,重复3次】
rep("TP53",3)# 【TP53, 重复3次】
rep(c("TP53","ERBB2","BRCA1"),each=3)#【每个向量重复3次】
rep(c("TP53","ERBB2","BRCA1"),3)#【 重复3次】
seq就是sequence序列
seq(1,3)#默认为整数1 返回值为1,2,3
seq(1,3,by=0.5) by是设定间隔值,返回值为1, 1.5, 2, 2.5, 3
sort(a)#排序
rev(a)#反向排序
table(a)###每个变量的counts
unique(a)####显示变量唯一的数目
sort(a)#排序
sort(a,decreasing = TRUE) #降序排序
order()得到排列的小标用,返回的是每个变量在一维向量中的排序位置编号
每个函数都有很多哑变量可以微调整,参考help文档说明,或者TAB键联想,每个调整参数之间以,分割
判断向量类型
在预算中如果报错,那就需要check元素类型是否不支持,as.xxxx函数可以帮助把数据变成指定类型或状况。
class()查看数据类型
str()查看数据结构
dim()查看数据维度
is.data.frame()返回TRUE or FALSE逻辑向量
as.character()可以帮助把数据变成字符型数据(加双引号“”的变量)
构建matrix
a<-matrix(1:20,nrow = 4,ncol =5 )
a<-matrix(1:20, 4,5 )
a<-matrix(1:20, 4)
#三者等同
构建data.frame
a<-data.frame(a=seq(1,5),b=seq(6,10))
data.frame的行和列数目必须一致,并且行名不能重复,列名可以重复
提取数据
对于向量,由于是一维结构,可以直接a[3],取向量中第3个数值
对于矩阵和数据框,由于是二维结构,需要指定二位结构
a[2,3]取数据框中的第2行、第三列的数值
data.frame默认是列为单位
可以对列进行直接操作
例如a是数据框变量
mean(a[,1])、mean(a$1) 可以直接求a的第一列的均值
但是mean(a[1,])却不可以直接求a的某一行的均值
需要先转换后在计算
mean(as.numeric(a[1,]))
如果添加行,则将改变所有的列。如果重新赋值,可以将a改成数据框类型。如果没有重新赋值,则不改变a的类型。依次类推,还有as.xxx等系列函数
对list进行操作
list是三维结构,所以需要进行三维定位
例如a是list变量
a[1]则得到列表中的第一个列表,进行一次降维
a[[1]] 得到第一元素,进行了二次降维
有时候两种方法得到的结果看起来是一样的,可是使用class查看数据类型后发现,其实[[]]之后已经对数据进行了二次降级,变成了元素。
数据框取索引
通常我们想提取数据框中的指定行或者指定列
一般有两种简单提取思维
1)提取目标变量所在下标值(可以理解为坐标,例如第几行)
举例
a<-data.frame(sample=rep(c("tumor","sample"),4),age=seq(1:8))
要求1,提取sample为tumor的数据
我可以找到sample列=tumor的行号
b<-a$sample=="tumor"
注意==是逻辑判断符号,所以返回的是逻辑性变量
image.png
然后直接导入编辑变量
tumorsample<-a[b,]
image.png
也可以一步代码
tumorsample<-a[a$sample=='tumor',]
a<-seq(1,100)
a>2 #返回的是逻辑变量
a[a>2]#返回的是向量变量,自动过滤掉FALSE变量
体会下不同
文件读取和保存
read.table('文件名', header = T,sep = '\t' )
read.csv('文件名', header = T )
write.table(a,file = "aa")
write.csv (a,file = "aa")
重命名
重命名行名
rownames(b)<-
colname(b)<-
尚不完善,持续更新ing
感谢jimmy和他的生信菜鸟团家族
网友评论