第二章:创建数据集
一 R中的数据
二 数据的输入
一R中的数据
数据集:通常是由数据构成的一个矩形数组,行表示观测,列表示变量
R可以处理的数据类型:数值型、字符型、逻辑型、复数型(虚数)、原生型(字节)
R将类别型(包括名义型和有序型)变量称为因子
数据结构
R有许多用于存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表
在R中,对象是指可以赋值给变量的任何事物
向量
向量是用于存储数值型、字符型、或逻辑型数据的一堆数组。用函数c()可以创建向量。单个向量的数据必须拥有相同的类型(数值型,字符型或逻辑型)
1 > a<-c(1,2,3,4,5,6,7) 2 > a 3 [1] 1 2 3 4 5 6 7 4 > b<-c("one","two","three") 5 > b 6 [1] "one" "two" "three" 7 > c<-c(TRUE,FALSE,TRUE,TRUE,FALSE)
通过方括号访问向量中的元素
1 > a<-c(6,5,4,3,2,1) 2 > a[3] 3 [1] 4 4 > a[c(1,3,5)] 5 [1] 6 4 2 6 > a[2:6] 7 [1] 5 4 3 2 1
矩阵(是一个二维数组,只是每个元素都是相同的模式)
一般格式
mymatrix<-matrix(vector,nrow=number_of_rows, ncol=number_of_columns,
byrow=logical_value, dimnames=list(char_vector_names,char_vector_colnames))
vector包含了矩阵的元素,nrow和ncol用于指定行和列的维数,dimnames包含了可选的、以字符型向量表示的行名和列名。
byrow则表明矩阵应当按行填充(byrow=TRUE)还是按列填充(byrow=FALSE),默认情况是按列填充
代码2-1
1 > y<-matrix(1:20,nrow=5,ncol=4) 2 > y 3 [,1] [,2] [,3] [,4] 4 [1,] 1 6 11 16 5 [2,] 2 7 12 17 6 [3,] 3 8 13 18 7 [4,] 4 9 14 19 8 [5,] 5 10 15 20 9 > cells<-c(1,26,24,68) 10 > rnames<-c("R1","R2") 11 > cnames<-c("C1","C2") 12 > mymatrix<-matrix(cells,nrow=2,ncol=2,byrow=TRUE,
dimnames=list(rnames,cnames)) 13 > mymatrix 14 C1 C2 15 R1 1 26 16 R2 24 68 17 > mymatrix<-matrix(cells,nrow = 2,ncol = 2,byrow = FALSE, 18 + dimnames = list(rnames,cnames)) 19 > mymatrix 20 C1 C2 21 R1 1 24 22 R2 26 68
访问矩阵中的元素
代码2-2
1 > x<-matrix(1:10,nrow=2) 2 > x[2,] 3 [1] 2 4 6 8 10 4 > x[1,4] 5 [1] 7 6 > x[1,c(4,5)] 7 [1] 7 9
数组
数组与矩阵类似,但维度可以大于2。通过array()函数实现,形式如下:
myarray<-array(vector,dimensions,dimnames)
其中vector包含了数组中的数据,dimensions是一个数值型向量,给出了各个维度下标的最大值,dimnames是可选的、各维度名称标签的列表。
代码2-3
1 > dim2<-c("B1","B2","B3") 2 > dim1<-c("A1","A2") 3 > dim2<-c("B1","B2","B3") 4 > dim3<-c("C1","C2","C3","C4") 5 > z<-array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3)) 6 > z 7 , , C1 8 9 B1 B2 B3 10 A1 1 3 5 11 A2 2 4 6 12 13 , , C2 14 15 B1 B2 B3 16 A1 7 9 11 17 A2 8 10 12 18 19 , , C3 20 21 B1 B2 B3 22 A1 13 15 17 23 A2 14 16 18 24 25 , , C4 26 27 B1 B2 B3 28 A1 19 21 23 29 A2 20 22 24
数据框
数据框通过data.frame()创建
mydata<-data.frame(col1,col2,col,……)
其中列向量col1,col2,....可以为任何类型(如字符型,数值型或逻辑型)。每一列的名称可由函数names指定。
代码2-4
1 > patientID<-c(1,2,3,4) 2 > age<-c(25,34,28,52) 3 > diabetes<-c("Type1","Type","Type1","Type1") 4 > status<-c("Poor","Improved","Excellent","Poor") 5 > patientdata<-data.frame(patientID,age,diabetes,status) 6 > patientdata 7 patientID age diabetes status 8 1 1 25 Type1 Poor 9 2 2 34 Type Improved 10 3 3 28 Type1 Excellent 11 4 4 52 Type1 Poor
选取数据框中的元素
代码2-5
1 > patientdata[1:2] 2 patientID age 3 1 1 25 4 2 2 34 5 3 3 28 6 4 4 52 7 > patientdata[c("diabetes","status")] 8 diabetes status 9 1 Type1 Poor 10 2 Type Improved 11 3 Type1 Excellent 12 4 Type1 Poor
1 > patientdata$age # $符号用来选取一个给定数据框中的某个特定变量
2 [1] 25 34 28 52 3 > table(patientdata$diabetes,patientdata$status) 4 5 Excellent Improved Poor 6 Type 0 1 0 7 Type1 1 0 2
attach()可以将数据框添加到R的搜索路径中
detach()将数据从搜索路径中移除
with()
列表
列表可用函数list()创建列表
mylist<-list(object1,object2,....)
or
mylist<-list(name1=object1,name2=object2,...)
代码2-7
1 > g<-"my first list" 2 > h<-c(25,26,18,39) 3 > j<-matrix(1:10,nrow = 5) 4 > k<-c("one","two","three") 5 > mylist<-list(title=g,ages=h,j,k) 6 > mylist 7 $title 8 [1] "my first list" 9 10 $ages 11 [1] 25 26 18 39 12 13 [[3]] 14 [,1] [,2] 15 [1,] 1 6 16 [2,] 2 7 17 [3,] 3 8 18 [4,] 4 9 19 [5,] 5 10 20 21 [[4]] 22 [1] "one" "two" "three" 23 24 > mylist[[2]] 25 [1] 25 26 18 39 26 > mylist[["ages"]] 27 [1] 25 26 18 39
二 数据的输入(键盘,文本文件,统计软件,数据库等)
数据的更改:edit()函数
fix()函数
从带分隔符的文本文件导入数据:read.table()
mydata<-read.table(file,header=logical_value,
sep="delimiter",row.names="name")
其中file是一个带分隔符的ASCII文本文件,header是一个表明首行是否包含了变量的名称的逻辑值,sep用来指定分割数据的分割符,row.names是一个可选参数,用以指定一个或多个表示行标识符的变量
导入excel数据:先在excel中将其导出为逗号分隔文件(csv),然后导入到R中
下载安装xlsx包,然后read。xlsx(file,n)n为要导入的工作表序号
mydataframe<-read.xlsx(workbook,1)
从网页抓取数据:使用readlines()函数下载网页,然后用如grep()和gsub()一类函数处理
导入spass数据:通过foreign包中的函数read.spss()导入R中,
也可以使用Hmisc包中的spss.get()函数
mydataframe()<-spss.get("mydata.sav",use.valuel.labels=TRUE) use.value.labels=TRUE表示函数将带有值标签的变量导入为R中水平的相应因子。