基本数据结构
今天看到一个好的系列博客,在此推荐:http://blog.fens.me/series-r/
这部分主要介绍R语言的几种数据结构。R语言的数据结构为向量、矩阵、数组、数据框、列表。
向量
向量主要是用来存储数值型(1,2,3)、字符型(“abc”,“efg”)或者逻辑型(true、false)数据的一维数组。我们可以用函数c()来创建向量。如下:
> a<-c(1,2,3,3,4,5)
> b<-c("abc","efg")
> c<-c(TRUE,FALSE,TRUE)
这里要注意的是向量和标量的区别:标量是只包含一个元素的向量。
对于我们创建好的向量我们可以采取类似编程语言中数组下标的方式读取,但是这里要注意的是R语言的下标不是从0开始的,而是从1开始的。如下:
> a<-c(1,2,3,3,4,5)
> a[1]
[1] 1
当我们要取一段数值序列时,比如我们要取第二个到第四个数据时我们可以用如下方法:
> a[2:4]
[1] 2 3 3
向量中还有一些常用的函数,像mode(),length(),rbind(),cbind()等等,这里举部分示例:
> x<-c(1:10)
> mode(x)#查看数据类型
[1] "numeric"
> y<-c("a","b")
> mode(y)
[1] "character"
> length(x)#查看长度
[1] 10
> z<-c(11:20)
> z
[1] 11 12 13 14 15 16 17 18 19 20
> m1<-rbind(x,z)#组合成矩阵
> m1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
x 1 2 3 4 5 6 7 8 9 10
z 11 12 13 14 15 16 17 18 19 20
> m2<-cbind(x,z)
> m2
x z
[1,] 1 11
[2,] 2 12
[3,] 3 13
[4,] 4 14
[5,] 5 15
[6,] 6 16
[7,] 7 17
[8,] 8 18
[9,] 9 19
[10,] 10 20
还有一些其他数学运算的函数:mean()、sum()、min()、max()、var()、sd()、prod(),举例如下:
> x<-c(1:100)
> length(x)
[1] 100
> mean(x)#求平均值
[1] 50.5
> sum(x)#求和
[1] 5050
> max(x)#求最大值
[1] 100
> min(x)#求最小值
[1] 1
> var(x)#求方差
[1] 841.6667
> prod(x)#连乘
[1] 9.332622e+157
> sd(x)#求标准差
[1] 29.01149
矩阵
矩阵是一个二维数组,通过函数matrix创建矩阵。关于matrix的具体用法使用help(matrix)查看。下面仅做一些举例了:
> x<-matrix(1:10,nrow=5,ncol=2)#创建一个行为5,列为2的矩阵
> x
[,1] [,2]
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 10
> cells<-c(1,26,24,68)
> rnames<-c("R1","R2")
> cnames<-c("C1","C2")
> mymatrix<-matrix(cells,nrow=2,ncol=2,byrow=TRUE,dimnames=list(rnames,cnames))#创建一个2*2的矩阵,按行排列,同时给行和列命名
> mymatrix
C1 C2
R1 1 26
R2 24 68
当我们要选中矩阵中行、列或元素时,我们可以如下表示:
> x<-matrix(1:10,nrow=2)#创建一个2*5的矩阵
> 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[,2]#获取矩阵的第二列
[1] 3 4
> x[1,c(4,5)]#获取矩阵第一行的第4和5列
[1] 7 9
数组
数组与矩阵是类似的,但是数组的纬度可以大于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))#创建一个2*3*4的三维数组
> 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
数据框
数据框感觉就像数据库里面的表,通过函数data.frame()创建,示例如下:
> patientID<-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(patientID,age,diabetes,status)
> patientdata
patientID age diabetes status
1 1 25 Type1 Poor
2 2 34 Type2 Improved
3 3 28 Type1 Excellent
4 4 52 Type1 Poor
在数据框中有个新的符号$,它被用来选取一个给定数据框中的某个特定变量,示例如下:
> patientdata$age
[1] 25 34 28 52
列表
列表是R中数据类型最为复杂的一种,某个列表可以包含有若干向量,矩阵,数据框,甚至其他列表的组合。使用函数list()创建列表。示例如下:
> g<-"My First 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 First 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"