设为首页 加入收藏

TOP

《R实战》读书笔记三
2019-05-14 12:39:26 】 浏览:69
Tags:实战 读书 笔记
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangloveall/article/details/32046737

第二章创建数据集

本章概要

1探索R数据结构

2使用数据编辑器

3数据导入

4数据集标注

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

两个方面的内容。

方面一:R数据结构

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

理解数据集


sans-serif;font-size:16px;line-height:24px;color:rgb(68,68,68);"> 一个数据集通常由一个表格组合而成,行表示观测,列表示变量。病人的数据集如表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]23

>a[2:4]

[1]234

>a[a>2]

[1]34

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,]161116

[2,]271217

[3,]381318

[4,]491419

[5,]5101520

>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

C1C2

R1110

R21001000

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

B1B2B3

A1135

A2246

,,C2

B1B2B3

A17911

A281012

,,C3

B1B2B3

A1131517

A2141618

,,C4

B1B2B3

A1192123

A2202224

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

patientIDagediabtetesstatus

1124Type1Poor

2234Type2Improved

3328Type1Excellent

4452Type1Poor

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

>patientdata[1:2]

patientIDage

1124

2234

3328

4452

>patientdata[,1]

[1]1234

>patientdata[1,]

patientIDagediabtetesstatus

1124Type1Poor

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

agestatus

124Poor

234Improved

328Excellent

452Poor

>patientdata$age

[1]24342852

>patientdata[,2]

[1]24342852

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

>table(patientdata$diabtetes,patientdata$status)

ExcellentImprovedPoor

Type1102

Type2010

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':4obs.of4variables:

$patientID:num1234

$age:num24342852

$diabtetes:Factorw/2levels"Type1","Type2":1211

$status:Ord.factorw/3levels"Excellent"<"Improved"<..:3213

>summary(patientdata)

patientIDagediabtetesstatus

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

1stQu.:1.751stQu.:27.0Type2:1Improved:1

Median:2.50Median:31.0Poor:2

Mean:2.50Mean:34.5

3rdQu.:3.253rdQu.:38.5

Max.:4.00Max.:52.0

R列表

R列表可以包含向量、矩阵、数据框、列表等。

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

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

创建列表,例如:

>g<-"MyFirstList"

>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]"MyFirstList"

$ages

[1]24121829

[[3]]

[,1][,2]

[1,]16

[2,]27

[3,]38

[4,]49

[5,]510

[[4]]

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

获取列表中的元素

>mylist[[1]]

[1]"MyFirstList"

>mylist[[2]]

[1]24121829

>mylist[2]

$ages

[1]24121829

>mylist[["ages"]]

[1]24121829

数据输入

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

ageweight

11010

2128

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

>mydata

ageweight

11010

2128

387

方式二:从固定文本导入,使用函数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

weightheight

1601.75

2721.80

3571.65

4901.90

5951.74

6721.91

>odbcClose(channel)

>mydataframe

weightheight

1601.75

2721.80

3571.65

4901.90

5951.74

6721.91

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

>install.packages("xlsx")

>library(xlsx)

载入需要的程辑包:rJava

载入需要的程辑包:xlsxjars

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

>mydataframe1

weightheight

1601.75

2721.80

3571.65

4901.90

5951.74

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


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇STL中的容器 下一篇jsp---JspWriter的write()和print..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(217) }