第二章  创建数据集

本章概要

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. java实现代理domino web邮件下载

    [背景] 近日在研究domino web邮件下载功能,下载的邮件能够导入foxmail.outlook邮件client,下载的邮件格式为eml. [參考代码](须要下载jmail.jar包) priv ...

  2. WCF配置文件

    因为要上传较大的图片,WCF传递数组的默认的最大数组16KB就不够了.以下讲解配置内容. 服务端配置 这里一个WCF项目中有1个服务,配置文件如下(位于system.serviceModel标签中): ...

  3. HTML5 CSS3 诱人的实例 : 网页载入进度条的实现,下载进度条等

    今天给大家带来一个比較炫的进度条,进度条在一耗时操作上给用户一个比較好的体验,不会让用户认为在盲目等待,对于没有进度条的长时间等待,用户会任务死机了,毫不犹豫的关掉应用:一般用于下载任务,删除大量任务 ...

  4. Linux rpm 命令参数使用详解[介绍和应用](转)

    RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种 ...

  5. android数据访问模式:档、SharedPreferences

    android数据访问模式:档.SharedPreferences.SQLite 数据库.Content provider 文件流: 使用java IO流对文件进行读写操作,文件权限默认. 指定文件权 ...

  6. 微信电脑版(Mac和Windows)安装

    内容简介 1.微信Windows版 2.微信Mac版 3.总结优势 微信电脑版 众所周知,腾讯公司(马化腾先生执掌的巨头公司)开发的超成功App:微信.一经推出便引发业界轰动,使用人数更是直逼QQ. ...

  7. JSON连载java目的

    一. 前台(JS  面向对象) 1. 定义SearchView对象 function SearchView() { } SearchView.prototype.setViewName = funct ...

  8. 【Android基础】AndroidManifest常用权限permission整理

    android.permission.ACCESS_COARSE_LOCATION 通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米 android.permi ...

  9. 《学习opencv》笔记——矩阵和图像处理——cvGEMM,cvGetCol,cvGetCols and cvGetDiag

    矩阵和图像操作 (1)cvGEMM函数 其结构 double cvGEMM(//矩阵的广义乘法运算 const CvArr* src1,//乘数矩阵 const CvArr* src2,//乘数矩阵 ...

  10. Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable (转)

    最近需要做些接口服务,服务协议定为JSON,为了整合在Spring中,一开始确实费了很大的劲,经朋友提醒才发现,SpringMVC已经强悍到如此地步,佩服! 相关参考: Spring 注解学习手札(一 ...