基本數據結構
今天看到一個好的系列博客,在此推薦: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"