• R in Action(1) 基本数据结构


    一数据类型 

        R的数据类型包括数值型、字符型、逻辑型(布尔)、复数型和原生型,同时R有好多存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表,如下图所示下图(图的版权神马的归原作者跟原出版社所有,赶紧避嫌,呵呵)

    1、向量操作

    1 a <- c(1, 2, 5, 3, 6, -2, 4)
    2 b <- c("one", "two", "three")
    3 c <- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE)

        上面把3列向量赋与a,b,c,注意这里向量内的元素必须是同一种数据类型(数值型、字符型和逻辑型)
        访问向量如a[c(2,4)],将会得到a[2]跟a[4]的值,注意R与C、Python不一样,下标访问从1开始。

    a[2:4] 得到a[2],a[3],a[4]三个值,这里2:4等价于c(2,3,4)

    2、矩阵操作

     1 > y <- matrix(1:10, nrow = 5, ncol = 2)
     2 > y
     3      [,1] [,2]
     4 [1,]    1    6
     5 [2,]    2    7
     6 [3,]    3    8
     7 [4,]    4    9
     8 [5,]    5   10
     9 > y <- matrix(1:10, nrow = 5, ncol = 2,byrow=TRUE)
    10 > y
    11      [,1] [,2]
    12 [1,]    1    2
    13 [2,]    3    4
    14 [3,]    5    6
    15 [4,]    7    8
    16 [5,]    9   10

    上面代码是创建矩阵的代码,第一段跟第二段的区别是后者采用了按行的方式填充,R中默认是按列填充。

     1 cells <- c('东邪', '西毒', '南帝', '北丐')
     2 rnames <- c("R1", "R2")
     3 cnames <- c("C1", "C2")
     4 mymatrix <- matrix(cells, nrow = 2, ncol = 2, byrow = TRUE, 
     5                    dimnames = list(rnames, cnames))
     6 
     7 > mymatrix
     8    C1     C2    
     9 R1 "东邪" "西毒"
    10 R2 "南帝" "北丐"

    类似跟向量一样矩阵内的元素也要保持一致,上面代码可以给行列取别名。
    访问矩阵:

     1 > mymatrix[2]
     2 [1] "南帝"
     3 > mymatrix[2,2]
     4 [1] "北丐"
     5 > mymatrix[2,1:2]
     6     C1     C2 
     7 "南帝" "北丐" 
     8 > mymatrix[2,]
     9     C1     C2 
    10 "南帝" "北丐" 
    11 > mymatrix[,1]
    12     R1     R2 
    13 "东邪" "南帝" 
    14 > mymatrix[,1:2]
    15    C1     C2    
    16 R1 "东邪" "西毒"
    17 R2 "南帝" "北丐"

    3、数据框操作
        这是R里应用较为广泛的数据结构,它较矩阵具有更一般的形式,data_frame <- data.frame(col1,col2,....) 其中col1,col2可以为不同的数据类型。

    创建一个数据框

     1 > patientID <- c(1, 2, 3, 4)
     2 > age <- c(25, 34, 28, 52)
     3 > diabetes <- c("Type1", "Type2", "Type1", "Type1")
     4 > status <- c("Poor", "Improved", "Excellent", "Poor")
     5 > patientdata <- data.frame(patientID, age, diabetes, 
     6 +                           status)
     7 > patientdata
     8   patientID age diabetes    status
     9 1         1  25    Type1      Poor
    10 2         2  34    Type2  Improved
    11 3         3  28    Type1 Excellent
    12 4         4  52    Type1      Poor

    patientdata是一个包含4列的数据框,访问每一列可以用patientdata$age实现
    对每一列做处理的时候 都要加上数据框名字+$这个确实很繁琐,可以利用{attach(),detach()}和with()函数简化

    例如

    1 plot(patientdata$patientID,patientdata$age)
    2 
    3 attach(patientdata)
    4 plot(patientID,age)
    5 detach(patientdata)

    第一行代码可以用后三行代码替换,但是这里要注意一个问题,就是数据框里面列名不能跟外部内存对象同名。
    为解决这个问题,下面直接把操作都放到with()里面。

    1 with(patientdata,{plot(patientID,age)})


    4、因子操作

         这个相当于把列里面字符型元素,进行数字编码,在分类算法里面也通常对字符型特征进行数字编码(通常添加特征进行01编码)

     1 > patientID <- c(1, 2, 3, 4)
     2 > age <- c(25, 34, 28, 52)
     3 > diabetes <- c("Type1", "Type2", "Type1", "Type1")
     4 > status <- c("Poor", "Improved", "Excellent", "Poor")
     5 > diabetes <- factor(diabetes)
     6 > status <- factor(status, order = TRUE)
     7 > patientdata <- data.frame(patientID, age, diabetes, 
     8 +                           status)
     9 > str(patientdata)
    10 'data.frame':    4 obs. of  4 variables:
    11  $ patientID: num  1 2 3 4
    12  $ age      : num  25 34 28 52
    13  $ diabetes : Factor w/ 2 levels "Type1","Type2": 1 2 1 1
    14  $ status   : Ord.factor w/ 3 levels "Excellent"<"Improved"<..: 3 2 1 3
    15 > summary(patientdata)
    16    patientID         age         diabetes       status 
    17  Min.   :1.00   Min.   :25.00   Type1:3   Excellent:1  
    18  1st Qu.:1.75   1st Qu.:27.25   Type2:1   Improved :1  
    19  Median :2.50   Median :31.00             Poor     :2  
    20  Mean   :2.50   Mean   :34.75                          
    21  3rd Qu.:3.25   3rd Qu.:38.50                          
    22  Max.   :4.00   Max.   :52.00   

    通常内置的是按字母顺序创建,例如Excellent、Improved、Poor编码成0、1、2
    5、列表操作

    1 g <- "My First List"
    2 h <- c(25, 26, 18, 39)
    3 j <- matrix(1:10, nrow = 5)
    4 k <- c("one", "two", "three")
    5 mylist <- list(title = g, ages = h, j, k)
    

    列表访问的时候mylist[[2]]和mylist[['age']]

  • 相关阅读:
    Vue学习之监听methods、watch及computed比较小结(十一)
    Vue学习之路由vue-router传参及嵌套小结(十)
    Vue学习之路由vue-router小结(九)
    Vue学习之组件切换及父子组件小结(八)
    Vue学习之全局和私有组件小结(七)
    Vue学习之动画小结(六)
    Vue学习之vue-resource小结(五)
    Vue学习之生命周期钩子小结(四)
    Vue学习之过滤器和自定义指令小结(三)
    Vue学习之品牌案例部分代码小结(二)
  • 原文地址:https://www.cnblogs.com/kobedeshow/p/3339760.html
Copyright © 2020-2023  润新知