• 《R实战》读书笔记三


    第二章  创建数据集

    本章概要

    1探索R数据结构

    2使用数据编辑器

    3数据导入

    4数据集标注

    本章所介绍内容概括例如以下。

    两个方面的内容。

    方面一:R数据结构

    方面二:进入数据或者导入数据到数据结构

    理解数据集

    一个数据集通常由一个表格组合而成,行表示观測,列表示变量。

    病人的数据集如表1所看到的。


    表1 病人数据集

    数据集可以反映数据结构、数据类型和内容。

    数据结构

    R数据结构如图2所看到的。


    图2:R数据结构

    数据结构即数据的组织方式。R数据结构包含向量、矩阵、数组、数据框和列表等。

    R向量

    R向量是一维数组,元素类型能够为数值型、字符型和逻辑型等。

    函数c()可用来形成向量,比如:

    > a <- c(1,2,3,4)

    > b <- c("one", "two", "three", "four")

    > c <- c(TRUE, TRUE, TRUE, TRUE)

    向量元素数据类型必须同样,标量能够视为一个元素的向量。

    向量元素获取方法,位置获取法或者逻辑获取法,比如:

    > a[1]

    [1] 1

    > a[c(2,3)]

    [1] 2 3

    > a[2:4]

    [1] 2 3 4

    > a[a>2]

    [1] 3 4

    R矩阵

    R向量是一个二维数组,矩阵中元素的数据类型必须同样。

    创建矩阵的方法。即用矩阵函数。形式例如以下:

    mymatrix <- matrix(vector, nrow=nrownum,ncol=ncolnum,byrow=logical_value,

    dimnames=list(rownames_vector,colnames_vector))

    创建矩阵。比如:

    > x <- matrix(1:20, nrow=5, ncol=4)

    > x

         [,1] [,2] [,3] [,4]

    [1,]    1    6   11   16

    [2,]    2    7   12   17

    [3,]    3    8   13   18

    [4,]    4    9   14   19

    [5,]    5   10   15   20

    > cells <- c(1, 10, 100, 1000)

    > rnames <- c("R1", "R2")

    > cnames <- c("C1", "C2")

    > mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=TRUE, dimnames=list(rnames, cnames))

    > mymatrix

        C1   C2

    R1   1   10

    R2 100 1000

    R数组

    R数组与相似,但维数超过2维。

    创建数组方法。即用数组函数,形式例如以下:

    myarray <- array(vector,  dimensions, dimnames)

    创建数组,比如:

    > dim1 <- c("A1", "A2")

    > dim2 <- c("B1", "B2", "B3")

    > dim3 <- c("C1", "C2", "C3", "C4")

    > z <- array(1:24, c(2, 3, 4), dimnames=list(dim1, dim2, dim3))

    > z

    , , C1

       B1 B2 B3

    A1  1  3  5

    A2  2  4  6

    , , C2

       B1 B2 B3

    A1  7  9 11

    A2  8 10 12

    , , C3

       B1 B2 B3

    A1 13 15 17

    A2 14 16 18

    , , C4

       B1 B2 B3

    A1 19 21 23

    A2 20 22 24

    R数据框

    R数据框中不同的列能够包括不同类型的内容。

    表1病人数据集就能够使用R数据框来存放数据。

    创建数据框,即用数据框函数,形式例如以下:

    mydata <- data.frame(col1, col2,  col3 ...)

    创建数据框。比如:

    > patientID <- c(1, 2, 3, 4)

    > age <- c(24, 34, 28, 52)

    > diabtetes <- c("Type1", "Type2", "Type1", "Type1")

    > status <- c("Poor", "Improved", "Excellent", "Poor")

    > patientdata <- data.frame(patientID, age, diabtetes, status)

    > patientdata

      patientID age diabtetes    status

    1         1  24     Type1      Poor

    2         2  34     Type2  Improved

    3         3  28     Type1 Excellent

    4         4  52     Type1      Poor

    获取数据框中的元素,比如:

    > patientdata[1:2]

      patientID age

    1         1  24

    2         2  34

    3         3  28

    4         4  52

    > patientdata[,1]

    [1] 1 2 3 4

    > patientdata[1,]

      patientID age diabtetes status

    1         1  24     Type1   Poor

    > patientdata[c("age", "status")]

      age    status

    1  24      Poor

    2  34  Improved

    3  28 Excellent

    4  52      Poor

    > patientdata$age

    [1] 24 34 28 52

    > patientdata[,2]

    [1] 24 34 28 52

    R数据框生成交叉表,比如

    > table(patientdata$diabtetes, patientdata$status)

            Excellent Improved Poor

      Type1         1        0    2

      Type2         0        1    0

    attach()函数能够把数据框增加到R的搜索路径。

    detach()函数表示把数据框从R的搜索路径中移除。

    R因子

    分类或者有序分类变量在R中称为因子。

    R 因子实比例如以下:

    > patientID <- c(1, 2, 3, 4)

    >  age <- c(24, 34, 28, 52)

    > diabtetes <- c("Type1", "Type2", "Type1", "Type1")

    > status <- c("Poor", "Improved", "Excellent", "Poor")

    > diabtetes <- factor(diabtetes)

    > status <- factor(status, order=TRUE)

    > patientdata <- data.frame(patientID, age, diabtetes, status)

    > str(patientdata)

    'data.frame':   4 obs. of  4 variables:

     $ patientID: num  1 2 3 4

     $ age      : num  24 34 28 52

     $ diabtetes: Factor w/ 2 levels "Type1","Type2": 1 2 1 1

     $ status   : Ord.factor w/ 3 levels "Excellent"<"Improved"<..: 3 2 1 3

    > summary(patientdata)

       patientID         age       diabtetes       status

     Min.   :1.00   Min.   :24.0   Type1:3   Excellent:1

     1st Qu.:1.75   1st Qu.:27.0   Type2:1   Improved :1

     Median :2.50   Median :31.0             Poor     :2

     Mean   :2.50   Mean   :34.5

     3rd Qu.:3.25   3rd Qu.:38.5

     Max.   :4.00   Max.   :52.0

    R列表

    R列表能够包括向量、矩阵、数据框、列表等。

    创建列表的方法,即用列表函数,形式例如以下:

    mylist <- list(object1, object2, ...)

    创建列表。比如:

    > g <- "My First List"

    > h <- c(24, 12, 18, 29)

    > j <- matrix(1:10, nrow=5)

    > k <- c("one", "two", "three")

    > mylist <- list(title=g, ages=h, j, k)

    > mylist

    $title

    [1] "My First List"

    $ages

    [1] 24 12 18 29

    [[3]]

         [,1] [,2]

    [1,]    1    6

    [2,]    2    7

    [3,]    3    8

    [4,]    4    9

    [5,]    5   10

    [[4]]

    [1] "one"   "two"   "three"

    获取列表中的元素

    > mylist[[1]]

    [1] "My First List"

    > mylist[[2]]

    [1] 24 12 18 29

    > mylist[2]

    $ages

    [1] 24 12 18 29

    > mylist[["ages"]]

    [1] 24 12 18 29

    数据输入

    R导入不同数据源,如图3所看到的。


    图3:R导入不同数据源

    R数据导入能够參阅R官方文档:http://cran.r-project.org/doc/manuals/R-data.pdf

    R数据导入方式例如以下

    方式一:从键盘导入,先创建一个空的数据框或者矩阵。后用edit()函数。

    比如:

    > mydata <- data.frame(age=numeric(0), weight=numeric(0))

    > mydata <- edit(mydata)

    > mydata

      age weight

    1  10     10

    2  12      8

    > fix(mydata)  # 等价于mydata <- edit(mydata)

    > mydata

      age weight

    1  10     10

    2  12      8

    3   8      7

    方式二:从固定文本导入,使用函数read.table(),形式例如以下:

    mydataframe <- read.table(file, header=logical_value, sep="delimiter", row.names="name")

    方式三:从Excel导入,能够把Excel先转换为纯文本或者xxx.csv文件。使用方式二导入数据。或者在Windows操作系统,使用RODBC包中相关函数导入。比如:

    > setwd("E:\data")

    > getwd()

    [1] "E:/data"

    > install.packages("RODBC")

    > library(RODBC)

    > channel <- odbcConnectExcel("patient.xls")

    > mydataframe <- sqlFetch(channel,"Sheet1")

    > mydataframe

      weight height

    1     60   1.75

    2     72   1.80

    3     57   1.65

    4     90   1.90

    5     95   1.74

    6     72   1.91

    > odbcClose(channel)

    > mydataframe

      weight height

    1     60   1.75

    2     72   1.80

    3     57   1.65

    4     90   1.90

    5     95   1.74

    6     72   1.91

    若是Excel2007及以上版本号,使用xlsx包中函数导入数据,比如:

    > install.packages("xlsx")

    > library(xlsx)

    加载须要的程辑包:rJava

    加载须要的程辑包:xlsxjars

    > mydataframe1 <- read.xlsx("patient.xlsx", 1)

    > mydataframe1

      weight height

    1     60   1.75

    2     72   1.80

    3     57   1.65

    4     90   1.90

    5     95   1.74

    6     72   1.91

    方式四:从xml导入,能够用xml包种方法导入。能够參阅: www.omegahat.org/RSXML

    方式五:从网页爬虫导入。能够先下载网页,再用readLines()方法,參阅:www.programmingr.com

    方式六:从spss导入,能够用foreign包的read.spass()方法或者Hmisc包的spss.get()方法。

    方式七:从sas导入,SAS9.1版本号下面,能够用用foreign包的read.ssd()方法或者Hmisc包的sas.get()方法;更高版本号,能够使用商业统计数据转换软件或者把SAS结果输出为csv格式。再用read.table()导入。

    方式八:从stas导入,用foreign包的read.dta()方法。

    方式九:从nteCDF导入,用ncdf或者ncdf4包中的方法。

    方式十:从HDF5导入。用hdf5包中的方法。

    方式十一:从DBMS导入。用包ODBC中方法。ODBC方法如图4所看到的。

    图4: RODBC包的函数

    一些与数据库打交道的包,比如:DBI、RJDBC、RMySQL、ROracle、RPostgreSQL和RSQLite等。

    方式十二:从stattransfer导入

    利用一个商业化软件stattransfer实现数据格式转换,參阅:www.stattransfer.com

    标注数据

    利用标准数据使得结果更易理解。通过变量标签或者值标签来标准数据。

    工作于数据对象的实用函数

    工作于数据对象的一些实用函数如图5所看到的:

    图5:工作于数据对象的实用函数

    总结

    1​ 数据分析任务的挑战之中的一个就是数据准备。

    2R组织数据的方式,向量、矩阵、数组、数据库、列表等

    3R数据导入方式

    Resource:

    1http://www.wangluqing.com/2014/06/r-in-action-note3/

    2《R in action》第一部分第二章创建数据集

  • 相关阅读:
    各种有趣言论收集
    人类未来进化方向恶考
    mysql 列所有表行数
    恩,有那么一个人
    00后厉害哇
    。。。。
    放弃微博,继续回来写月经
    嘿,大家还好吗
    git
    require js
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5056502.html
Copyright © 2020-2023  润新知