美文网首页R语言
R_数据处理_basic

R_数据处理_basic

作者: 1998962ab991 | 来源:发表于2017-08-13 11:41 被阅读79次

    数据结构

    数据结构:向量、矩阵、数组、数据框、因子、列表

    向量

    • 用于储存数值型、字符型逻辑性数据的一维数组
      • 同一向量中的数据必须为同一模式;例如同为数值型
    • 通过方括号[ ] 给定元素所处位置的数值来访问向量中的元素

    标量:只含一个元素的向量

    a[1]
    
    a[2:6]
    
    a[c(2,4)]
    

    矩阵&数组

    • 矩阵:二维数组,每个元素都拥有相同的模式(数值型、字符型、逻辑型)
      • 使用方括号[]和下标 来选择矩阵中的行、列或元素
      • matrix(vector, nrow=n1, ncol=n2, byrow=FALSE, dimnames=list(rnames, cnames))

    nrow/ncol = n,表示行列的数量,即维度

    byrow = FALSE(默认), 按列填充

    dimanems=list() : 可选的,以字符型向量命名的行名与列名

    x<- matrix(1:10, nrow=2)
    
    x[2,]
    x[1,4]
    x[1,c(4,5)]
    
    • 数组:任意维度的向量;是矩阵的自然推广
      • array(vector, dimensions, dimnames=list())

    数据框

    • 不同的列可以包含不同模式(数值型、字符型等)的数据,通常用data.frame()创建
    • 通过方括号[ ]$ 以及 attach()&detach() 或 with()进行选取
      • 列所处位置的数值
      • 指定列名
      • 运用with()进行数据框绑定,用花括号{ }来指定对数据框执行的语句;
        • 对象仅存在于with()结构以内
        • 若要创建with()结构以外也存在的对象,使用特殊赋值符号<<替代标准的赋值符号< ;可以将对象保存在全局环境中
    ## 指定 列所处位置的数值
    patientdata[1:2]  
    
    ## 指定列名
    patientdata[c("disbetes", "status")]
    
    patientdata$diabetes
    
    ## --------with()绑定数据框-----------------------#
    with(mtcars, {
      stats <- summary(mpg)
      stats
    })
    

    列表

    • 列表:任意对象的有序集合;列表允许若干个对象到单个对象名下。(即列表可能是向量、矩阵、数据框,甚至是其他列表的组合)
      • 通过双重括号[[ ]]中指名代表某个成分的数字或名称来访问列表中的元素
      • list(name1 = object1, name2 = object2)
    mylist[[2]]
    mylist[['age']]
    mylist$age
    

    结构判断

    • str():返回对象整体数据结构

    • class():返回单个对象格式/类型

    • mode():返回对象模式

    • dim():返回对象维度

    • summary():统计摘要;区别对待不同类型的数据变量- (1)数值型:相关极值等信息;(2)名义型/有序型:显示的是各水平的频数值

    数据类型

    因子

    变量类别型变量(名义型、有序型)和连续型变量;

    • 名义型变量:没有顺序之分的 [类别型] 变量
    • 有序型变量:一定顺序的 [类别型] 变量
    • 连续型变量:呈现某个范围内的任意值,并同时表示了顺序和数量
    • <u>[名义型、有序型] 变量在R中称为 [因子] (factor)</u>
    • 函数factor() 以一个整数向量的形式存储类别值,范围为[1..k](k是名义型变量中唯一值的个数),同时一个字符串(原始值)组成的 内部向量 映射到这些整数
    • facotr(x, ordered=FALSE, levels=c(), labels=c(), exclude=NA)

    ordered = FALSE(默认);若为TRUE,则为有序型变量

    • 对字符型向量,默认顺序按 英文字母顺序创建 [a-z]

    levels=c():覆盖默认排序的顺序;保证指定的水平与数据中的真实值相匹配,因为任何在数据中出现而未在参数列举中的数据都会被设为缺失值

    labels=c():将有序型变量转化为名义型变量

    • 标签的顺序必须和因子水平的顺序相一致;
    • 所有不一致的变量将被设为缺失值NA

    exclude =NA:转变为因子时排除在外的变量,即不参与有序化;

    > diabetes<- c('type1','type2','type1','type1')
    > diabetes <- factor(diabetes);diabetes
    [1] type1 type2 type1 type1
    Levels: type1 type2
    
    # --------有序型因子,order=T------------------------------#
    > status <- c('poor','improved','excellent','poor')
    > status <-factor(status, ordered=T);status
    [1] poor      improved  excellent poor     
    Levels: excellent < improved < poor
    
    # 覆盖原有的因子顺序 -- levels=c()为指定的顺序
    status <-factor(status, ordered=T, levels=c('poor','improved','excellent'));status
    [1] poor      improved  excellent poor     
    Levels: poor < improved < excellent
    
    # levels中的值必须在数据中出现;  参数中为出现的值默认被设置NA
    > status <-factor(status, ordered=T, levels=c('poor','improved','x'));status
    [1] poor     improved <NA>     poor    
    Levels: poor < improved < x
    
    # 变更为无序因子(名义型变量)
    > status; 
    [1] poor      improved  excellent poor     
    Levels: excellent < improved < poor
    factor(status, labels=c(1,2,3))  # 标签的顺序必须和因子水平的顺序相一致
    [1] 3 2 1 3
    Levels: 1 < 2 < 3
    
    #  因子化时排除某个变量
    > x <- factor(c(1, 2, 3), exclude = 3); x
    [1] 1    2    <NA>
    Levels: 1 2
    

    语句diabetes <- factor(diabetes) 将此向量存储为(1,2,1,1)(以一个整数向量的形式存储类别值,范围为[1..k]),并在内部将其关联为 1 = type1 和 2 =type2(具体赋值根据字母顺序而定)

    针对向量diabetes进行的任何分析都会将其作为名义型变量对待,并自动选择适合这一测量尺度的统计方法

    语句status <-factor(status, ordered=T) 将向量存储为(3,2,1,3),并在内部关联为 1=excellent, 2=improved, 3=poor

    数据类型 & 转换

    • 数值型 - is.numeric() & as.numeric()

      • 整数型 is.integer() & as.integer()
      • 双精度型 is.double() & as.double()
    • 字符串形式 is.character() & as.character()

    • 逻辑型 is.logical() & as.logical()

    • 因子型 is.factor() & as.factor()

    as.factor(x) -- 只能对整个数据/列进行转换,其中无法插入其他语法

    在作图时因子化需用 factor

    • 向量型 is.vector() & as.vectro()
    • 矩阵型 is.matrix() & as.matrix()
    • 数组型 is.array() & as.array()
    • 数据框型 is.data.frame() & as.data.frame()
    # 多列变更
    data[,col:col] <- lappy(gb[,col:col], as.numeric)
    # gb[,c("net_activation","total_income")] <- lapply(gb[,c("net_activation","total_income")], as.numeric)
    

    数据选取

    元素选取

    负号表示排除

    ##  负号:表示排除某一列
    mtcars[,-1]  #  表示排除第一列
    
    
    ## 向量的选取
    # 位置选取
    a[2]; a[1:6]; a[c(1,4)];
    # 判断选取
    a[a>2]; a[a==2]
    
    ## 矩阵&数据框选取
    # 位置选取
    a[1,]; a[,1]; a[1,2]; a[1, c(4,5)]
    
    ## 数据框选取
    # 位置选取
    mtcars[1,];  mtcars[,1];  mtcars[1:2,];  mtcars[,1:2]
    mtcars[1:2]  # 默认选取列,选取1与2列
    mtcars[1:2, 3:4]
    mtcars[c('wt')];  mtcars[1:2, c('wt','hp')]
    mtcars$hp  # 运用 $ 进行选取
    

    逻辑选取

    • 逻辑选取,后端运行分为两步
      1. 根据已有的条件对每个对象进行判断,结果为TRUE或FALSE
      2. 指定某个对象中提取为TURE的值
        • <u>该对象的类型必须与条件判断的对象类型相同</u> 或者说 <u>前的范围必须 $\le$ 后者</u>

    mtcars$wt[mtcars$carb==2] :选取carb为2的wt列;注意,wt与carb的对象均为列;

    mtcars[mtcars$carb==2] :会报错,提示undefined columns selected ;此时前者范围大于后者;<u>因为mtcars有n列,但逻辑为TRUE的只有一列,无法判断应该选取哪一列,故报错。</u>

    mtcars$carb[mtcars>2]: 可以运行;不满足的部分用NA显示

    # 逻辑判断选取
    mtcars[mtcasr>10]
    mtcars$hp[mtcars>10]
    

    子集选取 - subset

    • subset(x, subset, select, drop = FALSE, ...)
      • S3 method for class 'data.frame'

    subset :选取的逻辑表达式;选取条件

    select :选择的列

    subset(airquality, Temp > 80, select = c(Ozone, Temp))
    subset(airquality, Day == 1, select = -Temp)
    subset(airquality, select = Ozone:Wind)
    
    
    

    控制流

    重复和循环

    • for结构for (var in seq) statement
      • 循环执行某语句statement,直到某个变量var的值不在包含在序列seq中为止
    for (i in 1:10) print("hello")
    
    • while结构while (cond) statment
      • 必须确保cond中的条件语句能【被改变】(即它在某个时刻不在为真),否则循环将永不停止

    条件执行

    表示相等==

    • if-else结构if (cond) statement 或者 for (cond) statement1 else statement2
    if (!is.factor(grade)) gerade <- as.factor(grade) else print("Grade already is a factor")
    
    • ifelse结构ifelse(cond, statement1, statement2)
    ifelse(sorce>0.5, print("Passed"), print("Failed"))
    outcome <- ifelse(socre>0.5, "Passed", "Failed")
    
    • switch结构:根据一个表达式的值选择语句执行switch(expr,...)

    expr之后的…是expr的可能取值,后接等号(=),表示执行的行为

    switch语句中,不同条件末尾要有 [逗号]

    若expr为文本形式,输入时需加 [引号]

    feelings <- c("sad", "afraid")
    for (i in feelings)
      print(
        switch(i,
              happy  = "I am glad you are happpy",  # 用逗号分隔
              afraid = "There is nothing to fear",
              sad    = "Cheer Up",
               angry = "Calm down now"
              )
      )
    

    逻辑判断

    • which(): 返回为真的逻辑对象,允许对数组array使用

    自编函数

    • 结构
    myfunction <- function(arg1, arg2, ...){
      statements
      return(object)
    }
    

    实用函数

    • length(x):对象x的长度
    • seq(from, to, by):生成一个序列
    • rep(x, n):将x重复n次
    • cut(x, n):将连续型变量分为n个水平的因子
    • ptetty(x, n):将连续型变量分为n个区间
    • cat(..., file="myfile", append=FALSE):连接...的对象,并将其输出到屏幕上或文件中
    > cat("hello", "bob", "\b.\n", "Is\'t R", "\t", "Great?\n","!")
    hello bob.
     Is't R      Great?
     !
    

    cat( ) 与 paste( ) 相同与区别

    • 区别:
      • paste( ) 对应的列单独合并
      • cat( ) 合并为一个单元格
    paste(c("X","Y"),1:10,sep="")
    # [1] "X1"  "Y2"  "X3"  "Y4"  "X5"  "Y6"  "X7"  "Y8"  "X9"  "Y10"
    
    cat(c("X","Y"),1:10,sep="")
    # XY12345678910
    

    funs的用法

    • 直接在函数中写明需要运行的函数 summarise(., vars(), mean)
    • 结合funs写出调用的函数 summarise(., vars(), funs(mean))
    summarise_all(df1[,-1],funs(mean,sum)) # 若出现两个及以上的函数,列名中自动添加后缀
    summarise_all(df1[,-1],funs(sum(.*2))) # 所有数据用.表示
    summarise_all(df1[,-1],funs(medi=median)) # 指定得到的列后缀名, 函数仍为miedan
    summarise_all(df1[,-1],funs("in"=median)) # 或者加引号 (因为in在R中表示其他含义)
    mutate_all(df1[,-1],funs(.^2))
    

    关于报错

    • This function should not be called directly :该函数在多个包中有同样的名字
      • 指定某个包的函数 dplyr::summarise()
      • 移除某个包 detach(package:plyr)

    符号的使用

    基本符号

    • ( )定义函数的参数
    • ( )在运算中作为优先级
    • [ ] 用做对象的元素索引
    • { } 作为代码段落的起止
    • %in% 表示包含
    • 用分号;来分隔两个代码;
    > x <- "AAABBBCCC"
    > str_sub(x, 1, 1) <- 1;  x
    [1] "1AABBBCCC"
    

    常见符号

    正则表达式的pattern时,要用两个转义符来进行转义\\,因为r中一个\本身就是转义符的意思

    **Windows下路径要用斜杠/或者双反斜杠\\ **,原因同上

    名称 作用 示例
    <- 赋值符号
    \ 转义符
    [ ] 给定元素所处位置的数值 a[c(2,4)]
    用于表示一个数值序列 a[2:6]
    [i,j] 选择指定的行与列 [i,][,j] [i,j][,]
    "" 用于目录名、文件名、包
    ' ' 引用双引号的文字为文本时出现 labs(title=' positon="fill" ')
    # 用于注释。#之后出现的任何文本都会被R解释器忽视; 并且R只能对单行进行注释,故当出现多条命令符,需在每行前面加上#
    $ 选取一个给定数据框中的某个特定变量 patientIDdata$age
    <<- 特殊赋值符
    [[ ]] 用于列表中选取对象 mylist[["ages"]] mylist[[2]]
    ^或** 求幂
    x% %y 求余数(x mod y) 5%%2=1
    x% / %y 整数除法。5%/2%=2
    == 严格等于(在浮点型数值时慎用==) 2+2==4
    != 不等于
    !x 非x
    x∣y x或y
    x&y x和y
    isTRUE(x) 测试x是否为TRUE
    [,-1][-1,] [,c(-2,-3)]/[,-c(2,3)] 删除第一列 删除第一行 删除多列,两种表达方式均可 mydata<-mydata[,-1] mydata<-mydata[,-c(2,3)]
    "[" 提取谋而对象一部分的函数,后跟序列数n;1表示该对象的第一部分; 2表示该对象的第二部分;

    R中常见表达式

    符号 作用 示例 解释
    分隔符号 y~x+z+w 左边-因变量/响应变量 右边-自变量/解释变量
    + 分隔预测变量
    预测变量的交互项 y~x+z+x:z
    * 所有可能交互项的表达方式 y~xzw---y~x+z+w+x:z+x:w+z:w
    ^ 交互项的某个次数 y~(x+z+w)^2---y~x+z+w+x:z+x:w+z:w 交互项最高次为2次
    . 包含除因变量之外的所有变量 y~.---y~x+z+w 当一个数据框包含y,x,z,w这四个变量时
    - 减号,从等式中移除某个变量 y~(x+z+w)^2-x:w--- y~x+z+w+x:z+z:w
    -1 删除截距项 y~x-1 拟合y在x上的回归,并强制直线通过原点
    I() 【大写的i】 从算术(而非表示式)的角度来解释括号中的元素 y~x+I((z+w)^2) 表示的是x+(z+w)²,而非x+z+w+z:w
    function 可以在表达式中运用的数学函数 log(y)~x+z+w
    mpg ~ wt | cyl 表示按条件(cyl)绘图; 即按cyl的水平为【分组条件】分别绘制mpg和wt的关系图

    <Br>

    研究设计表达式

    表达式 作用 解释
    y~A 单因素ANOVA 1.小写字母,定量变量 2.大写字母,组别因子(若不转换为factor,则默认为定量协变量) 3.Subject,被试者独有的标志变量 4.Error(Subject/A),表示组内因子
    y~x+A 含单个协变量的单因素ANCOVA
    y~A * B 双因素ANOVA 展开为 ~A+B+A:B
    y~x1+x2+A*B 含两个协变量的双因素ANCOVA
    y~B+A(B是区组因子) 随机化区组
    y~A + Error(Subject/A) 单因素组内ANOVA
    y~B*W+Error(Subject/W) 含单个组内因子(W)和单个组间因子(B)的重复测量ANOVA 展开为 ~B+W+B:W

    字符规则

    引用符 字符 含义
    Quotes \n newline;换行
    Quotes \r carriage return
    Quotes \t tab;制表符
    Quotes \b backspace;空格
    Quotes \a alert (bell)
    Quotes \f form feed
    Quotes \v vertical tab
    Quotes \ backslash \
    Quotes ' ASCII apostrophe '(单引号)
    Quotes " ASCII quotation mark "(双引号)
    Quotes ` ASCII grave accent (backtick) `
    Quotes \nnn character with given octal code (1, 2 or 3 digits)
    Quotes \xnn character with given hex code (1 or 2 hex digits)
    Quotes \unnnn Unicode character with given code (1--4 hex digits)
    Quotes \Unnnnnnnn Unicode character with given code (1--8 hex digits)

    相关文章

      网友评论

        本文标题:R_数据处理_basic

        本文链接:https://www.haomeiwen.com/subject/xansrxtx.html