版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangloveall/article/details/32046737
第二章创建数据集
本章概要
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]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》第一部分第二章创建数据集