• R语言实战(第二版)part 1笔记



    说明:
    1.本笔记对《R语言实战》一书有选择性的进行记录,仅用于个人的查漏补缺
    2.将完全掌握的以及无实战需求的知识点略去
    3.代码直接在Rsudio中运行学习



    R语言实战(第二版)

    part 1 入门


    ----------第1章 R语言介绍--------------------

    help.start() #帮助文档首页
    demo() #R语言demo演示
    demo(package = .packages(all.available = TRUE))
    demo(image) #演示图像
    example("mean") #函数mean使用示例
    
    library(ggplot2);library(pheatmap)
    example("ggplot") #演示R包
    example("pheatmap") #par(ask=F)
    
    vignette() #文档
    vignette("dplyr")
    options() #显示或设置当前选项
    options(digits = 2)
    help("option") #/help(options)
    
    q() -> y #退出保存.Rhistory和.RData
    dir.create("./test") #创建新目录
    getwd()
    ls() #列出对象
    rm(list = ls()) #清空对象
    
    save.image("./test.RData") #保存工作空间
    load("./test.RData") #读取工作空间
    
    source("./test.R") #执行脚本
    pdf("test.pdf")
    png("test.png")
    dev.off()
    
    
    library() #显示库中的包
    .libPaths() #库路径
    search() #显示哪些包已加载
    help(package="ggplot2")
    update.packages()
    
    #R CMD BATCH <options> test.R test.Rout #Linux终端批处理
    #<R/path/R.exe> CMD BATCH --vanilla --slave "test.R" #window 批处理
    
    help(mtcars) #示例数据帮助
    lmfit <- lm(mpg~wt, mtcars)
    summary(lmfit)
    plot(lmfit)
    cook <- cooks.distance(lmfit)
    plot(cook)
    predict(lmfit,newdata)
    

    ----------第2章 创建数据集------------

    #行列:observation-variable, record-field, example-attribute
    #数值型变量,字符型变量;类别型(因子):有序,名义
    #向量、矩阵、数组、数据框、因子、列表
    matrix(1:20,nrow = 4,ncol = 5,byrow = F,dimnames = list(c("A","B","C","D"),c("math","eng","chinese","music","art")))
    array(1:24,c(2,3,4),dimnames = list(c("A","B"),c("a","b","c"),c("test1","test2","test3","test4"))) #2行3列4维
    #数据框选择列
    mtcars[1:2]
    mtcars[c("mpg","cyl")]
    mtcars$mpg
    
    #环境中有同名对象时不适用
    attach(mtcars)
    plot(mpg,wt)
    detach(mtcars)
    
    #赋值仅在with函数中有效
    with(mtcars,{
      stats <- summary(mpg)
      out <<- summary(mpg) #使用特殊赋值符<<-可在括号外使用,写入全局变量,慎用
    })
    stats
    out
    
    #字符型向量因子水平默认以字母顺序创建,可用levels参数指定顺序
    factor(c("poor","improved","excellent"),order=T)
    factor(c("poor","improved","excellent"),order=T,levels = c("poor","improved","excellent"))
    #数值型向量可编码为因子
    factor(c(1,2),levels = c(1,2),labels = c("male","female"))
    
    #列表元素
    list[[2]]
    list[["ages"]]
    list$ages
    
    #从键盘输入数据
    data <- data.frame(age=numeric(0),gender=numeric(0),weight=numeric(0)) #创建空的数据框
    data <- edit(data) #手动输入
    data
    newdata <- fix(data) #直接修改数据, 原data数据也将改变
    newdata
    data
    newdata2 <- edit(data) #编辑并另存为数据,原data数据不会变
    newdata2
    data
    
    read.table(colClasses = c("character"),row.names = "geneID",stringsAsFactors = F) 
    #如读入以0开头的文本时保留0,如股票0010; 如若不以第一行为行名,指定某行; 默认转换字符变量为因子,设为F,可提升读取速度。
    xlsx::read.xlsx("./test.xlsx",1) #1表工作表序号
    
    #数据对象函数
    length()
    dim/str/class/mode
    names()
    cbind/rbind
    head/tail
    

    ----------第3章 图形初阶--------------------

    dev.new() #画图前新建一个图形窗口
    plot(mtcars$mpg,mtcars$cyl)
    dev.off() #关闭图形窗口,与pdf等连用
    
    par(no.readonly = T,lty=2,pch=7) #设置图形参数
    
    pch #点符号0-25
    cex #符号大小
    lty #线条类型1,2,3,4,5,6
    lwd #线条宽度
    col #默认的绘图颜色
    col.axis  #坐标轴刻度文字颜色
    col.lab #坐标轴名称颜色
    col.main #标题颜色
    col.sub #副标题颜色
    fg #图形前景色
    bg #图形背景色
    cex.axis #坐标轴刻度文字缩放倍数
    cex.lab #坐标轴名称缩放倍数
    cex.main #标题缩放倍数
    cex.sub #副标题缩放倍数
    font #字体样式,1常规,2粗体,3斜体,4粗斜体,5符号字体
    font.axis
    font.lab
    font.main
    font.sub
    ps #字体磅值
    family #字体族,serif衬线,sans无衬线,mono等宽
    pin #图形尺寸(宽高),英寸
    mai #边界大小,下左上右,英寸
    mar #边界大小,下左上右,英分
    
    
    #表示颜色的方法:
    col=1 #颜色下标
    col="white" #名称
    col="#FFFFFF" #十六进制
    col=rgb(1,1,1) #RGB值(基于红绿蓝三色生成)
    col=hsv(0,0,1) #HSV值(基于色相-饱和度-亮度生成)
    
    colors() #查看所有颜色
    
    library(RColorBrewer)
    n <- 7
    mycolors <- brewer.pal(n,"Set1") #Set1调色板中选取n种
    barplot(rep(1,n),col = mycolors)
    
    brewer.pal.info #调色板列表
    display.brewer.all() #调色板展示
    
    mycolors2 <- rainbow(n) #彩虹色
    pie(rep(1,n),labels = mycolors2,col = mycolors2)
    
    mygrays <- gray(0:n/n) #n阶灰度色
    pie(rep(1,n),labels = mygrays,col = mygrays)
    
    names(pdfFonts()) #系统中可用字体
    
    abline(v=seq(1,10,2),lty=2,col="blue") #添加参考线
    legend() #添加图例
    text() #绘图区内部添加文本,通常用于标示图形中的点
    mtext() #图形边界之一添加文本
    plotmath() #添加数学符号
    demo(plotmath)
    
    #图形组合排布
    par(mfrow=c(2,2)) #按行
    par(mcol=c(1,3)) #按列
    layout()
    

    ------------------第4章 基本数据管理------------

    data <- data.frame(x1=c(2,2,6,4),x2=c(3,4,2,8))
    transform(data,sumx=x1+x2,meanx=(x1+x2)/2)
    
    x%%y #求余
    4%%3
    x%/%y #取整
    5%/%2
    
    is.na() #NA
    is.infinite() #Inf,-Inf
    is.nan() #NaN
    
    #多数数值函数中含有na.rm=T参数
    sum(x,na.rm = T)
    na.omit()
    
    Sys.Date()
    date()
    as.Date("2019-3-5")
    as.Date("02/17/2019","%m/%d/%Y")
    difftime(Sys.Date(),"2019-3-1",units = "days")
    
    is.numeric()/is.character()/is.vector()/is.matrix()/is.data.frame()/is.factor()/is.logical() #判断,与if-then联合使用
    as.numeric()/as.character()/as.vector()/as.matrix()/as.data.frame()/as.factor()/as.logical() #转换
    
    #排序函数
    #order 返回排序后的索引
    mtcars[order(mtcars$mpg,-mtcars$cyl),]
    #sort 直接排序,返回排序后结果
    sort(mtcars$mpg,decreasing = T)
    #rank 返回排名(相同排名会出现小数)
    rank(mtcars$mpg)
    
    #合并函数
    merge(df1,df2,by=c("ID","Country"))
    cbind(df1,df2,df3) #必须相同行数,以同顺序排序
    rbind(df1,df2)
    dplyr::left_join(df1,df2,by="ID") #right_join/full_join
    
    mtcars[,c(2:4)] #选列
    mtcars[,c(-2,-5)] #剔除列
    mtcars$hp <- mtcars$wt <- NULL #剔除两列,NULL未定义(不同于NA)
    mtcars[!(names(mtcars) %in% c("hp","wt"))] #是否包含所选列名
    
    mtcars[1:3,] #选行
    mtcars[mtcars$mpg>20 & mtcars$vs=="0",]
    
    #取子集
    subset(mtcars,mpg>20 | hp<90,select = mpg:hp) #选行又选列
    
    #随机抽样
    mtcars[sample(1:nrow(mtcars),3,replace=F),]
    

    --------------第5章:高级数据管理--------------

    #1.数学函数
    abs(-1)
    sqrt(25)
    ceiling(3.2) #不小于某值的最小整数
    floor(3.2) #不大于某值的最大整数
    trunc(3.2) #截取整数
    round(3.456,digits = 2) #保留2位小数(四舍五入)
    signif(3.456,digits=2) #保留2位有效数字(四舍五入)
    cos(x)/sin(x)/tan(x)
    acos(x)/asin(x)/atan(x)
    log(4,base = 2)
    log(10) #取自然对数,而非ln(4)
    log10(10) #常用对数
    exp(2) #指数,即e^2
    
    #总结R语言中取整运算主要包括以下五种:floor()向下取整,ceiling()向上取整,round()四舍五入取整,turnc()向0取整,signif()保留给定位数的精度
    #以上函数可直接用在数值向量、矩阵或数据框中
    
    #2.统计函数
    x <- c(1,1.2,4,3,6,9,3,23,0.001,10)
    mean(x)
    mean(x,trim = 0.05,na.rm = T) #去掉最大和最小的5%数据以及缺失值后的均值
    median(x)
    sd(x) #标准差
    var(x)
    mad(x) #绝对中位差:统计离差,是一种鲁棒统计量,MAD=median(∣Xi-median(X)∣)
    quantile(x) #求分位数
    quantile(x,1/4) #25%分位数
    quantile(x,0.9) #90%分位数
    range(x) #值范围
    sum(x)
    diff(x) #滞后差分,默认滞后1位,即后一位数减前一位数
    diff(x,lag = 2)
    min(x)
    max(x)
    scale(x) #按列进行中心化或标准化
    scale(x,center = T,scale = T) #默认。center中心化,center和scale标准化
    scale(dataframe) #同样对矩阵或数据框的列进行均值为0,标准差位1的标准化,相当于Z score
    scale(dataframe)*sd+m #进行任意均值m和标准差sd的归一化
    transform(dataframe,var=scale(var)) #仅对矩阵/数据框的指定列进行归一化
    
    #3.概率函数
    #d=密度函数density
    #p=分布函数
    #q=分位数函数quantile
    #r=随机数生成函数random
    
    #eg:正态分布norm
    dnorm(x) 
    pnorm(1.96) #曲线下方面积
    qnorm(0.9,mean = 100,sd=200) #0.9分位点值
    rnorm(50,mean = 50,sd=10) #生成50个正态随机数
    
    a <- pretty(c(-5,5),30) #pretty(x, n)创建美观的分割点,将一个连续型变量x分割为n个区间,绘图中常用。
    b <- dnorm(a)
    plot(a,b,type = "l")
    
    #其他概率分布:
    beta/binom/chisq/exp/f/gamma/geom/hyper/logis/multinom/nbinom/pois/signrank/t/unif/weibull/wilcox.......
    
    runif(5) #生成(0,1]上服从均匀分布的伪随机数
    runif(5) #随机数每次都不同
    
    set.seed(123) #设定种子,使下次结果重现。数字可随意设定,复现时指定相同即可。
    runif(5)
    set.seed(123)
    runif(5) #复现结果,需与set.seed连用
    
    #4.字符处理函数
    x <- "adb234FGdef"
    nchar(x) #字符长度,length(x)是元素的个数
    length(x)
    
    substr(x,2,4) #提取子串
    grep("FG",x) #返回匹配下标
    sub("FG","yx",x)
    sub("\\s",".","hello world") #R语言转义\\
    sub("\\.","_","hello.world") #"."需要中括起来或加转义\\,不然默认为一个字符
    grepl()
    gsub()
    
    strsplit(x,"")
    unlist(strsplit(x,"234"))[2]
    sapply(strsplit(x,"234"), "[",2) # "["表提取某个对象一部分,即提取第2个元素
    
    paste(x,1:3,sep = "_")
    paste0(x,1:3)
    
    toupper(x) #大写转换
    tolower(x) #小写转换
    
    #其他函数
    seq(1,10,2)
    rep(1:7,3)
    cut(c(1:20),breaks=4) #将连续变量切割n个区间(水平因子)
    table(cut(c(1:20),breaks=4,labels = c("a","b","c","d")))
    pretty(c(1:20),4) #创建美观分割点(n个),常用绘图
    
    apply(mtcars, 2, sum)
    mydata <- matrix(rnorm(30),nrow = 6)
    apply(mydata, 1, mean)
    apply(mydata, 2, mean, trim=0.2) #可直接加函数参数
    fix(mydata) #加个NA试试
    apply(mydata, 2, mean, na.rm=T)
    
    lapply() #返回列表
    sapply() #返回向量
    
    #按条件创建新变量
    mtcars$new[mtcars$mpg >20 & mtcars$vs=="0"] <- "yes"
    mtcars$new[mtcars$mpg <=20 & mtcars$vs=="1"] <- "no"
    head(mtcars)
    
    #控制流
    #基本概念:语句{statement},条件cond(T or F),表达式expr,序列seq
    #1.循环
    for(i in 1:10) print("hello")
    i=10;while (i>0) {print("hello");i=i-1} #确保while中条件可变
    
    #2.条件
    #if-else结构
    grade <- "10"
    if(!is.factor(grade)) grade <- as.factor(grade) else print("grade already is factor")
    
    #ifelse结构(紧凑)
    ifelse(as.numeric(grade)>9,"passed","failed")
    
    #switch结构 (选择)
    for (i in c("sad","happy"))
      print(
        switch(i,
          happy="yes",
          sad="no",
          angry="nono"
        )
      )
    
    #3.自编函数
    #描述统计量计算函数
    mystats <- function(x,parametric=T,print=F){
      if(parametric){
        center <- mean(x);spread <- sd(x)  #参数统计量
      }else{
        center <- median(x);spread <- mad(x) #非参统计量
      }
      if(print & parametric){
        cat("mean=",center,"\n","sd=",spread,"\n")
      }else if(print & !parametric){
        cat("median=",center,"\n","mad=",spread,"\n")
      }
      result <- list(center=center,spread=spread)
      return(result)
    }
    
    ##验证以上函数
    set.seed(123)
    x <- rnorm(100)
    mystats(x)
    mystats(x,parametric = F)
    mystats(x,parametric = F,print = T)
    mystats(x,parametric = T,print = T)
    
    
    #switch自编函数
    mydate <- function(type="long"){
      switch(type,
             long=format(Sys.time(),"%A %B %d %Y"),
             short=format(Sys.time(), "%m-%d-%y"),
             cat(type, "is note a recognized type\n") 
             #cat捕获用户输入错误,也可用warning(提示错误),message(诊断信息),stop(停止执行)等函数
             )
    }
    
    ##验证以上函数
    mydate()
    mydate("long") #默认
    mydate("short")
    mydate("x")
    
    
    #整合(aggregate)和重塑(reshape)
    t(mtcars)
    head(mtcars)
    aggregate(mtcars, by=list(mtcars$cyl,mtcars$gear), FUN = mean, na.rm=T)
    
    library(reshape2)
    md <- melt(mtcars,id=c("mpg","cyl")) #融合,宽数据变长数据
    #提取id列,其他列全部融合
    md2 <- dcast(md,mpg+cyl~variable) #重塑,长数据变宽数据
    head(md2)
    dcast(md,mpg+variable~cyl)
    dcast(md,cyl+variable~mpg)
    #使用mpg对cyl和variable分组
    #公式的左边每个变量都会作为结果中的一列,而右边的变量被当成因子类型,每个水平都会在结果中产生一列。
    
    dcast(md,mpg~variable,mean)
    dcast(md,cyl~variable,mean)
    dcast(md,mpg~cyl,mean)
    
    #dcast-输出时返回一个数据框。acast-输出时返回一个向量/矩阵/数组
    
  • 相关阅读:
    一意孤行
    叶子书签
    漫舞
    男朋友
    ubuntu自动关机命令,ubuntu 无法关机解决方法
    情人节
    生死由天
    春暖花开
    android开发学习中的问题:error: device not found解决办法
    暗恋
  • 原文地址:https://www.cnblogs.com/jessepeng/p/10604371.html
Copyright © 2020-2023  润新知