一、数据类型

1.数据分类

1.1数值型

  • numeric:250

    1.2字符型

  • character:加了引号都是。”a”、”1”、”a+1”、’?’

    1.3逻辑型

    1.3.1 表现形式

  • logical T/F/NA,并不是所有的NA都是逻辑型

    1.3.2 来源

  • 比较运算的结果:== 、<、>、!=

  • 逻辑运算:和& 或| 非! 举例:!(3>4) TURE

    2.数据的判断和转换

    2.1 判断

    1. class()#判断数据类型,向量返回元素的数据类型,数据框返回 ,矩阵返回 ,列表返回
    2. is.numeric()#is族函数,返回值为T/F

    2.2转换

  • 转换规律:数值型→字符型;逻辑型→字符型;逻辑型→数值型

    1. as.numeric()#as族函数,将数据转换为数值型

    二、数据结构

    1. 向量 vector

  • 只能包含一种数据类型 x <- c(1,3,5,1);x x:变量名 1:元素

    1.1 向量的生成:

  • c() 1:3 rep()

    1.2 向量的筛选:[]

  • 将TURE筛选出来,FALSE丢弃;x[x%in%y]

  • []中可以是向量,如,x[1:4] x[c(1,5)] ,1:4和c(1,5)都是向量;
  • 也可以是向量中元素的下标,如,x[-4];
  • 也可以是逻辑值,如,x[x%in%y],与x等长的逻辑值向量

    1.3 向量的修改``

  • 向量的修改需要赋值

    1.4 向量的简单做图

  • plot(x) ,以x中的元素为图中y轴的值

    1.5 参考价值的习题

    1. kids <- c("a",'b','c','d','e')
    2. scores <- c('3','4','5','1','2')
    3. kids1 <- c("a","c","d","b","e")
    4. score[order(scores)] ##sort(x)=x[order(x)]
    5. kids[order(scores)] ##以scores的从低到高给kids排序
    6. x[match(y,x)] ##y是模板,给x调整顺序
    7. scores[match(kids1,kids)];scores ##以kids1模板调整kids的顺序的元素的下标改变来调整scores的顺序

    1.6 代码总结

    1. paste0()/paste()/paste(x,y,sep="") ##将两个向量组合在一起无/有空格/分隔符 paste0(rep("x",3),1:3) = paste0("x",1:3) ##与位置有关的函数会循环补齐
    2. x==y ##一一对应比较,生成等长向量,循环补齐,以长的为主
    3. x%in%y ##检验x中的每个元素是否存在于y中,返回的是x等长的逻辑向量
    4. length(x) ##计算向量里面元素的个数
    5. unique(x) ##去重复 ,保留第一次出现的元素
    6. duplicated(x) ##判断元素在之前是否已经出现过,判断,未出现过F,出现过T !duplicated()
    7. table(x) ##重复值统计
    8. sort(x) ##默认从小到大排序 sort(x,decreasing=T)从大到小
    9. rev() ##逆转 rev(sort(x))从大到小排序
    10. identical(y1,y2) ##确认y1和y2是否完全一致
    11. intersect(x,y) union() setdiff(x,y) ##x中有y中无 #取交集,并集,差集
    12. rounda,2 ##保留a的2位小数
    13. rnorm(n=10,mean=0,sd=18) ##取随机数
    14. rep(,times=) ##重复序列
    15. seq(from=,to=,by=) ##有规律序列

    2. 数据框 data.frame

  • 一列只包含一个向量,即一列为同一种数据类型。如果将数据框转换为矩阵,将对其中的数据类型进行转换,详见数据转换规律。

    2.1 数据框生成

  • 直接输入,或读取文件:df2 <- read.csv(‘gene.csv’)

    2.2 数据框属性

  • dim() ##有几行几列

  • nrow(df) ##几行 ncol(df) ##几列
  • rownames(df) ##行名

    2.3 数据框取子集

  • 取一个:df[2,3] ##第2行第3列

  • 取一列:df$gene df[,2]
  • 取一行:df[2,]
  • 取几行几列:df[c(),1:2]
  • 按名字:df[,”gene”] df[,c(“a”,”b”)]
  • 按条件:df$gene[df%score<0] ##筛选df数据的score>0对应的gene df[df$score>0,] ##筛选df中score>0的行

    2.4 数据框添加、删除

  • df$aa<-c() ##注意要和原有数据框的列长度相等

  • df[,-ncol(df)] ##删除最后一列

    2.5 数据框修改

  • 改一个/改一行/改一列: df$p.value<-c(0.1,0.2,0.3,0.4,0.5)

  • 改行名列名 : rownames(df)<-c() colnames(df)[2]=”change”改一个列名一个行名

    2.6 数据框进阶

    1. head(iris,3) ##看Iris的前3行
    2. str(df) ##看数据类型,几行几列,具体内容 5 obs. of 2 variables,5行2列
    3. na.omit(df) ##去除含有缺失值的行
    4. cbind ##按列连接 rbind ##按行连接
    5. merge(test1,test2,by="name") ##两个表格的连接,取两者的交集合并成1个数据
    6. merge(test1,test2,by.x="name",by.y="NAME"

    2.7 参考价值的习题

    2.7.1.png2.7.2.png
    x y :将y的列名改成TCGA-ID
    identical(colnames(y),x$file_name)) F:identical是一一对应比较
    colnames(y) <- x$ID[match(colnames(y),x$file_name)] ##注意检查一下结果是否一一对应

    3. 矩阵 matrix

  • 只允许1种数据类型,数据自动转换

    3.1 矩阵新建

  • m<-matrix(1:9,nrow=3)

    3.2 矩阵取子集

  • m[2,] 同数据框

    3.3矩阵的转秩和转换

  • 转秩:t(m)行名会转成列名

  • 转换为数据框:as.data.frame()

    3.4 画热图:

  • heatmap::pheatmap(m),自动进行聚类操作。

  • 如果不想聚类的进行画热图heatmap::pheatmap(m,cluster_cols=F,cluster_rows=F)

    4. 列表 list

  • 啥都能装

    4.1 新建列表

  • x<-list(m=matris(1:9,nrow=3),df= x= ) ##可以是向量,数据框和矩阵的集合,l的元素的名字分别是m,df,x。

    1. l <- list(m=matrix(1:9, nrow = 3),
    2. df=data.frame(gene = paste0("gene",1:3),
    3. sam = paste0("sample",1:3),
    4. exp = c(32,34,45)),
    5. x=c(1,3,5))

    4.2 列表取子集

  • m[[2]]取第2个元素 m$df

  • m[2]和m[[2]]的区别在于数据结构,用class()判断。
  • m[2] 取的是列表中的第2个元素,数据类型仍然是列表list;
  • m[[2]]取的是列表第2个元素里面的内容,数据类型:向量=数据类型,数据框data.frame,矩阵matrix

    4.3 列表元素的名字

  • 向量里面每个元素的名字names()

  • x <- list(a= ,b= ) 将给列表的元素附上名字
  • names(x) <- c(‘a’,’b’) ##给列表x中的2个元素分别命名为a和b

    4.4 删除变量

  • rm(l)删除1个,删除多个rm(df,m), 删除全部 rm(list=ls()) ,清空控制台ctrl+l

    5、数据结构总结

  • $可以用在data.frame和列表list中

R语言入门-1——数据类型 - 图4

三、函数与R包

1. 函数

1.1 形式参数和实际参数

  • 形式参数的默认值:根据标准情况下表现最好的值,为默认值。
  • 2为实际参数,可以修改。abm为形式参数,不可修改。
  • 括号前的是函数();(括号里等号前的是形式参数=);(=括号里等号后的是实际参数)

![LJ]MQL~M)PVCOOW)Z2Y](V.png

1.2 认清函数和数据

  • @:给对象取元素或子集

    1.3习题,学习写函数

    1. a <- function(i){mean(i)+2*sd(i)} ##写一个函数,参数是一个数值型向量,输出结果是该向量的平均值加2倍的标准差
    2. a(c(1,3,2,4,5)) ##用户使用该函数的代码

    2. R包

    2.1 R包的安装

  • install.library(“ “) ##CRAN

  • BiocManager::install(“ “) ##bioconductor
  • devtools::install_github(“jmzeng1314/idmap1”) ##github
  • if(!require(stringr))install.packages(“stringr”) ##

    2.2 R包加载

  • library()

  • require()

    2.3 获取帮助

  • 搜索 bioconductor limma等

  • 少数R包有cheatsheets
  • ?seq
  • help(“seq”)
  • example(“seq”)
  • browseVignettes(“stringr”) ##不是所有的包都有
  • ls(“package:stringr”) ##列出包有哪些函数

    四、文件读写

    1. 文件读取

  • 分隔符:逗号 空格 制表符(\t)【txt分隔符为空格,csv 逗号为分隔符,tsv分隔符为 tab】

  • 打开方式:excel,记事本,sublime(大文件),R(read.csv(“ “),变量名和文件名不一致,且对数据框进行的修改不会同步到表格文件)
  • 可以改的参数:
  • header=T 【读取第一行】;
  • row.names =1 【第一列当行名使用】
  • check.names=F 【列名的特殊字符,如”-“不被读取】
  • numerals = 【小数点位数】
  • fill = T 【当某一列的行数与其他列的行数不匹配的时候,补齐NA】
  • sep = “\t” 【分隔符】

    1. read.table(" ") ##读取txt文件
    2. read.csv(" ") ##读取csv文件,两个文件的参数不同,具体如下
    3. mean(as.numeric(y$gene1)) ##注意读取matrix时,会因为既有数值型,又有字符型,导致数值型数据转换为字符型

    image.png

    2. 文件导出

  • csv:write.csv(test,file = “aaaa.csv “)

  • txt:write.table(test,file = “aaaa.txt “)
  • 最好不要用导出文件覆盖原文件

    3.Rdata

  • save(test,file=”aaaa.Rdata”) ##save生成的就是R.data,不论是否是save(xxx.csv),需要用load打开

  • load(“aaaaa.Rdata”) 里面可以包含多个数据
  • 脚本 .R

    4.其他格式

  • 行名无用论

  • 读取excel:import( .excel) import_list(读取excel工作簿,sheet1sheet2) export(aaa.csv等格式导出都可以)
  • 5G)3A%@~%HDE%%5X_8S32ZP.png

    五、绘图

    六、应用

    转自生信技能树