【学习】《R实战》读书笔记(第二章)

“读书会是一种在于拓展视野、宏观思维、知识交流、提升生活的活动。PPV课R语言读书会以“学习、分享、进步”为宗旨,通过成员协作完成R语言专业书籍的精读和分享,达到学习和研究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》第一部分第二章创建数据集

本栏目文章由PPV课R语言读书会提供,转载请注明来自PPV课R语言读书会。

版权所有,违者必究!

原文发布于微信公众号 - PPV课数据科学社区(ppvke123)

原文发表时间:2014-07-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据挖掘DT机器学习

从互联网巨头数据挖掘类招聘笔试题目看我们还差多少

1 从阿里数据分析师笔试看职业要求 以下试题是来自阿里巴巴招募实习生的一次笔试题,从笔试题的几个要求我们一起来看看数据分析的职业要求。 一、异常值是指什么?请列...

3757
来自专栏蜉蝣禅修之道

CMU算法求网络瓶颈链路

1766
来自专栏代码永生,思想不朽

utf8中文字符串的多模式匹配算法的优化

上个月接触到了我组的一个关于在海量文本中匹配字符串业务。读源代码时发现一些问题,并针对这些问题做了优化工作,效果非常明显。

4563
来自专栏大数据文摘

你的数据科学python编程能力过关吗?看看这40道题你能得几分

1643
来自专栏数据小魔方

R语言数据抓取实战——RCurl+XML组合与XPath解析

经常有小伙伴儿跟我咨询,在使用R语言做网络数据抓取时,遇到空值和缺失值或者不存在的值,应该怎么办。 因为我们大多数场合从网络抓取的数据都是关系型的,需要字段和记...

4988
来自专栏华章科技

令人困惑的TensorFlow!谷歌大脑工程师帮你解决麻烦

导读:虽然对于大多数人来说 TensorFlow 的开发语言是 Python,但它并不是一个标准的 Python 库。这个神经网络框架通过构建「计算图」来运行,...

1693
来自专栏CreateAMind

pytorch初体验

一部分的内容在2017年1月18日Facebook发行的PyTorch相比TensorFlow、MXNet有何优势? - 罗若天的回答 - 知乎 已有。

1241
来自专栏racaljk

人工智能搜索策略(上)

   广度优先搜索: 从初始节点S0开始逐层向下扩展,在第n层节点还没有全部搜索完之前,不进入第n+1层节点的搜索。Open表中的节点总是按进入的先后排序,先进...

4324
来自专栏Crossin的编程教室

【Python 第60课】 随机数

有些时日没发新课了,今天来说一说python中的random模块。 random模块的作用是产生随机数。之前的小游戏中用到过random中的randint: i...

3758
来自专栏机器之心

令人困惑的TensorFlow!

我叫 Jacob,是 Google AI Resident 项目的研究学者。我是在 2017 年夏天加入该项目的,尽管已经拥有了丰富的编程经验,并且对机器学习的...

1453

扫码关注云+社区

领取腾讯云代金券