第二章  创建数据集

本章概要

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》第一部分第二章创建数据集

《R实战》读书笔记三的更多相关文章

  1. R语言实战读书笔记(三)图形初阶

    这篇简直是白写了,写到后面发现ggplot明显更好用 3.1 使用图形 attach(mtcars)plot(wt, mpg) #x轴wt,y轴pgabline(lm(mpg ~ wt)) #画线拟合 ...

  2. R实战读书笔记四

    第三章 图形入门 本章概要 1 创建和保存图形 2 定义符号.线.颜色和坐标轴 3 文本标注 4 掌控图形维数 5 多幅图合在一起 本章所介绍内容概括例如以下. 一图胜千字,人们从视觉层更易获取和理解 ...

  3. iPhone与iPad开发实战读书笔记

    iPhone开发一些读书笔记 手机应用分类1.教育工具2.生活工具3.社交应用4.定位工具5.游戏6.报纸和杂志的阅读器7.移动办公应用8.财经工具9.手机购物应用10.风景区相关应用11.旅游相关的 ...

  4. <<Java RESTful Web Service实战>> 读书笔记

    <<Java RESTful Web Service实战>> 读书笔记 第一章   JAX-RS2.0入门 REST (Representational State ransf ...

  5. 机器学习实战 - 读书笔记(13) - 利用PCA来简化数据

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第13章 - 利用PCA来简化数据. 这里介绍,机器学习中的降维技术,可简化样品数据. ...

  6. 机器学习实战 - 读书笔记(12) - 使用FP-growth算法来高效发现频繁项集

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第12章 - 使用FP-growth算法来高效发现频繁项集. 基本概念 FP-growt ...

  7. 机器学习实战 - 读书笔记(11) - 使用Apriori算法进行关联分析

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第11章 - 使用Apriori算法进行关联分析. 基本概念 关联分析(associat ...

  8. 机器学习实战 - 读书笔记(07) - 利用AdaBoost元算法提高分类性能

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第7章 - 利用AdaBoost元算法提高分类性能. 核心思想 在使用某个特定的算法是, ...

  9. 【转载】MDX Step by Step 读书笔记(三) - Understanding Tuples (理解元组)

    1. 在 Analysis Service 分析服务中,Cube (多维数据集) 是以一个多维数据空间来呈现的.在Cube 中,每一个纬度的属性层次结构都形成了一个轴.沿着这个轴,在属性层次结构上的每 ...

  10. Spring实战读书笔记

    Spring实战读书笔记 Spring-core Spring之旅 - DI 和 AOP 概念 spring 的Bean容器 spring 的 核心模块 Spring的核心策略 POJO 最小侵入式编 ...

随机推荐

  1. 使用gSoap规避和改动ONVIF标准类型结构的解析

    ONVIF/gSoap依赖关系及问题 ONVIF是一组服务规范,标准參考 gSoap是一套基于实现SOAP通信接口的工具链 即是,当我们须要訪问ONVIF的Web Service或实现对ONVIF部分 ...

  2. 不合规范的html段落php处理细则

    最近业余时间在维护一个rss聚合应用,就发现很多网站feed的条目摘要存在各种问题,用strip_tags一刀切吧,对摘要的段落和样式扭曲了 例如:有一些网站的摘要是截断输出,例如指定的摘要长度截断, ...

  3. SICP的一些个人看法

    网上搜书的时候,看到非常多人将这本书神话. 坦率地说,个人认为这本书过于学术化, 没什么实际project价值.一大堆题目也基本是高中数学竞赛题类似,浪费时间. 软件的核心技术是什么? 1>   ...

  4. WPF 3D 常用类(1)

    原文:WPF 3D 常用类(1) 几何数据相关类 Geometry3D 抽象类, 用于定义物体的几何数据, 可用于计算HitTest和BoundingBox MeshGeometry3D Geomet ...

  5. Zookeeper分享

    Zookeeper: 是一个分布式的,为分布式应用提供数据一致性服务的程序. Zookeeper是怎么来的? 分布式系统:是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信 ...

  6. telnet模拟http訪问

    HTTP协议经常使用的无非就那么几个命令 GET HEAD PUT POST 此处简单说下http的GET和HEAD 举两个简单的样例: GET的样例 telnet serverip 80 GET h ...

  7. IIS7构造Gzip压缩

    IIS7构造Gzip压缩 本文来自Kevin Yang博客 作者:Kevin Yang 开启配置HTTP压缩(GZip) 在IIS7中配置Gzip压缩相比IIS6来说实在easy了很多.并且默认情况下 ...

  8. Storm具体的解释(二)、成为第一Storm申请书

         在全面介绍Storm之前,我们首先通过简单的Demo让我们来看看什么是整体感觉Storm. Storm执行模式: 本地模式(Local Mode): 即Topology(相当于一个任务,兴许 ...

  9. IIS URL Rewrite Module防盗链规则配置方法

    IIS版本:IIS 7.5 URL Rewrite组件:IIS URL Rewrite Module(http://www.iis.net/downloads/microsoft/url-rewrit ...

  10. robot framework 使用三:他们主动浏览器的兼容性

    robot framework 浏览器兼容性测试 上图中黄色圈的地方默认什么都不写,是firefox浏览器.写上ie就是ie浏览器了 firefox最新版本号即可,ie须要设置: 1. IE选项设置的 ...