数据集通常是由数据构成的一个矩形数组,行表示观测,列表示变量,对数据集的操作是数据分析的第一步
R语言的数据结构通常有以下几种:标量,向量,矩阵,数组,数据框和列表
向量
向量是用于存储数字型、字符型或逻辑型数据的一维数组。执行组合功能的函数c()可用来创建向量
> a<-c(1,2,3,4,5,6)
> b<-c("one","two","three")
> a
[1] 1 2 3 4 5 6
> b
[1] "one" "two" "three"
通常在方括号中给定元素所处位置的数值,对向量中的元素进行检索
> a<-c("k","j","h","a","c","m")
> a[5]
[1] "c"
> a[c(1,3,5)]
[1] "k" "h" "c"
> a[2:6]
[1] "j" "h" "a" "c" "m"
矩阵
矩阵是一个二维数组,每个元素的类型相同,通过函数matrix()创建矩阵
> y<-matrix(1:20,nrow=5,ncol=4)
> y
[,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,26,24,28)
> 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 26
R2 24 28
#这个矩阵中,byrow=TRUE是选择行填充,dimnames是指定行名和列名
同样矩阵元素的检索也是用到方括号
X[i,]是选择矩阵的第i行,X[,j]是选择矩阵的第j列,X[i,j]选择矩阵第i行第j列的元素
> x<-matrix(1:10,nrow = 2)
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
> x[2,]
[1] 2 4 6 8 10
> x[,5]
[1] 9 10
> x[2,5]
[1] 10
数组
数组与矩阵类似,到那时数组的维度可以大于2,数组可以通过array创建,一般格式如下
myarray<-array(vector,dimensions,dimnames)
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语言中最常用的数据集,它不同的列可以包含不同的数据类型
数据框可以通过data.frame创建
mtdata<-data.frame(col1,col2,col3....)
其中列向量col1,col2,col3可以为任何类型
> patienID<-c(1,2,3,4)
> age<-c(25,34,28,52)
> diabetes<-c("Type1","Type2","Type1","Type1")
> status<-c("Poor","Improved","Excellent","Poor")
> patientData<-data.frame(patienID,age,diabetes,status)
> patientData
patienID age diabetes status
1 1 25 Type1 Poor
2 2 34 Type2 Improved
3 3 28 Type1 Excellent
4 4 52 Type1 Poor
数据框的检索方式如下
> patientData[1,2]
[1] 25
> patientData[1:2]
patienID age
1 1 25
2 2 34
3 3 28
4 4 52
> patientData[c("diabetes","status")]
diabetes status
1 Type1 Poor
2 Type2 Improved
3 Type1 Excellent
4 Type1 Poor
> patientData$age
[1] 25 34 28 52
# $用于选区给定数据框中某个特定的变量
因子
变量可分为名义型变量,有序型,连续型变量
名义型变量是没有顺序之分的类别型变量,如糖尿病的类型
有序型变量代表一种顺序关系,而非数量关系,比如病情的好坏,坏<好
连续型变量则同时表示了顺序和数量
名义型变量和有序型变量在R中称为因子
factor函数可以将变量转化为因子,如果要排序,则需要ordered=TRUE参数,levels可以指定排序顺序
> patientID<-c(1,2,3,4)
> age<-c(25,34,28,52)
> diabetes<-c("Type1","Type2","Type1","Type1")
> status<-c("Poor","Improved","Excellent","Poor")
> diabetes<-factor(diabetes)
> status<-factor(status,ordered = TRUE)
> patientData<data.frame(patientID,age,diabetes,status)
Error: object 'patientData' not found
> patientData<-data.frame(patientID,age,diabetes,status)
> str(patientData)#显示数据结构
'data.frame': 4 obs. of 4 variables:
$ patientID: num 1 2 3 4
$ age : num 25 34 28 52
$ diabetes : 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 diabetes
Min. :1.00 Min. :25.00 Type1:3
1st Qu.:1.75 1st Qu.:27.25 Type2:1
Median :2.50 Median :31.00
Mean :2.50 Mean :34.75
3rd Qu.:3.25 3rd Qu.:38.50
Max. :4.00 Max. :52.00
status
Excellent:1
Improved :1
Poor :2
列表
列表是R中数据集最为复杂的一种,是一些对象的有序集合
可以使用list()函数创建列表
mylist<-list(object1,object2.....)
> g<-"My Frist List"
> h<-c(25,26,18,39)
> j<-matrix(1:10,nrow=5)
> k<-c("one","two","three")
> mylist<-list(title=g,ages=h,j,k)
> mylist
$title
[1] "My Frist List"
$ages
[1] 25 26 18 39
[[3]]
[,1] [,2]
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 10
[[4]]
[1] "one" "two" "three"