第二章  创建数据集

本章概要

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. Codeforces Round#297 div2

    B: 题意:给定一个字符串,然后给定m个数字 对于每个数字ai的含义是,将ai到n-ai+1的字符串给翻转一遍. 要求输出m次翻转之后的字符串. 想法就是判断第i个位置的字符是翻转了奇数次,还是偶数次 ...

  2. Windows Phone开发(30):图形

    原文:Windows Phone开发(30):图形 图形如矩形.椭圆.路径等都从Shape类派生,它们一般表示规则或不规则图形,这些图形都是简单的二维图形,我相信大家都能理解的. 例一:矩形. 请看下 ...

  3. 445port入侵详细解释

    445port入侵具体解释   关于"445port入侵"的内容445port入侵具体解释本站搜索很多其它关于"445port入侵"的内容 445port入侵, ...

  4. [原创]如何编写多个阻塞队列连接下的多生产者多消费者的Python程序

    平常在写程序时,往往会遇到一个需求:在程序的多个阶段都会出现阻塞的可能,因此,这多个阶段就需要并发执行. Python的多线程有一个特点,就是不允许从外部结束一个运行中的线程,这给我们编写代码时带来了 ...

  5. JAVA程序生成XML标准化的文件格式,缩进,美化。

    //他开始Document映射到文件 TransformerFactory transFactory = TransformerFactory.newInstance(); Transformer t ...

  6. Iphone CodeSign error: no provisioning profile at path 错

    今天在退房手续,变化了profile,当再次进行整理编译项目时.就出现了这个问题,在xCode 6 开发环境下出现了, 出现这个错误提示Code Sign error: Provisioning pr ...

  7. Android AlarmManager报警的实现

    什么是AlarmManager? AlarmManager它是Android经常使用的系统-Level提醒服务,我们指定为广播中的特定时间Intent. 我们设定一个时间,然后在该时间到来时.Alar ...

  8. js淡入淡出

    示例: js淡入淡出 原理:更改css不透明数值 知识点: css不透明 filter:alpha(opacity:30); opacity:0.3;} 小技巧: 小于临界值,做加速 大于临界值,做减 ...

  9. maven配置文件里改动默认jre

    方法一:打开%maven_home%\conf\setting.xml,仅仅会在新建项目时自己主动使用1.6的导入项目不会 在<profiles>标签内加入�例如以下配置: <pro ...

  10. 【程序员小助手】Synergy,感受穿越屏幕之美

    内容简介 1.Synergy简介 2.Synergy安装与配置 3.附录 [程序员小助手]系列 在这个系列文章中(不定期更新),小编会把这些年(也没几年)的编程学习和工作中使用到的个人感觉非常好的软件 ...