R和Python數據結構對比
本文內容概要:
- R語言數據結構及實例操作
- Python語言數據結構及實例操作
R語言數據結構及實例解析
接下開始學習R語言的向量、矩陣、數組、數據框、列表這五個數據結構。
1.向量
向量是用於存儲數值型、字元型或邏輯型數據的一維數組。函數c()可用來創建向量。單個向量中的數據必須擁有相同的數據類型.
> name <-c("猴子","李四","王五","張三"); #創建一個向量,並且賦值給name> name[1] "猴子" "李四" "王五" "張三""猴子","李四","王五","張三");
查看向量有多少個元素
> length(name)[1] 4
查找其中的某個元素
> name[1][1] "猴子" #得出位置1的元素> name[2][1] "李四" #得出位置2的元素> name[1:3][1] "猴子" "李四" "王五" #得出位置1到3的元素
增加一個元素
> name<-c(name,"小麻子")> name[1] "猴子" "李四" "王五" "張三" "小麻子"
2.矩陣
矩陣是一個二維數組,只是每個元素都擁有相同的模式(數值型、字元型或邏輯型) 。可通過函數matrix()創建矩陣。一般使用格式為:
myymatrix <- matrix(vector, nrow=number_of_rows, ncol=number_of_columns,byrow=logical_value, dimnames=list(char_vector_rownames, char_vector_colnames))
其中vector包含了矩陣的元素,nrow和ncol用以指定行和列的維數, dimnames包含了可選的、以字元型向量表示的行名和列名。選項byrow則表明矩陣應當按行填充(byrow=TRUE)還是按列填充(byrow=FALSE),默認情況下按列填充。
創建矩陣
> data<-c(1,2,3,4,5,6)> rnames<-c("r1","r2")> cnames<-c("c1","c2","c3")> a<-matrix(data=data,nrow=2,ncol=3,byrow=TRUE,dimnames = list(rnames,cnames))> a c1 c2 c3r1 1 2 3r2 4 5 6
查找
> a[1,] #得出矩陣的第一行c1 c2 c3 1 2 3 > a[,1] #得出矩陣的第一列r1 r2 1 4 > a[1,2] #得出行為1,列為2的元素[1] 2
矩陣在繪製條形圖中的一個應用
> age<-c(29,34,28,52)> rname<c("張三","李四","王五","麻子")> a<-matrix(age,nrow=4,ncol=1,dimnames=list(rnames,cnames))> a 年齡張三 29李四 34王五 28麻子 52> barplot(a[,"年齡"])
可看到年齡分布圖如下
3.數組
數組(array)與矩陣類似,但是維度可以大於2。數組可通過array函數創建,形式如下:
myarray <- array(vector, dimensions, dimnames)
其中vector包含了數組中的數據, dimensions是一個數值型向量,給出了各個維度下標的最大值,而dimnames是可選的、各維度名稱標籤的列表。如下創建了一個三維(2×3×4)數值型數組。
> 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 B3A1 1 3 5A2 2 4 6, , C2 B1 B2 B3A1 7 9 11A2 8 10 12, , C3 B1 B2 B3A1 13 15 17A2 14 16 18, , C4 B1 B2 B3A1 19 21 23A2 20 22 24
4.數據框
與矩陣不同的是,數據框的不同列可以包含不同模式(數值型、字元型等)的數據。每一列數據的模式必須唯一,但是卻可以將多個模式的不同列放到一起組成數據框。數據框可通過函數data.frame()創建:
mydata <- data.frame(col1, col2, col3,...)
其中的列向量col1、 col2、 col3等可為任何類型(如字元型、數值型或邏輯型)。每一列的名稱可由函數names指定。
實例如下:
> 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 status1 1 25 Type1 Poor2 2 34 Type2 Improved3 3 28 Type1 Excellent4 4 52 Type1 Poor
選取數據框中的元素
> patientdata[1:2] #選取1、2兩列 patientID age1 1 252 2 343 3 284 4 52---------------> patientdata[c("diabetes", "status")] #選取特定的"diabetes","status"兩列diabetes status1 Type1 Poor2 Type2 Improved3 Type1 Excellent4 Type1 Poor-------------------> patientdata$age # 其中$是用來選取一個給定數據框中的某個特定變數。[1] 25 34 28 52------------------> type2<-patientdata[patientdata$diabetes=="Type2",] #查找"Type2"型的病人> type2 patientID age diabetes status2 2 34 Type2 Improved----------------------------------> type2.number<-nrow(type2) #"Type2"型的病人有多少個> type2.number[1] 1
數據框的增加
- 增加一行
> patientID<-c(5)> diabetes<-c("Type2")> status<-c("poor") > age<-c(30)> newpatient<-data.frame(patientID,diabetes,status,age)> newpatient patientID diabetes status age1 5 Type2 poor 30> patientdata<-rbind(patientdata,newpatient) #rbind是根據行進行合併,就是自動往下面順延,但要求所有數據列數是相同的才能用rbind.> patientdata patientID age diabetes status1 1 25 Type1 Poor2 2 34 Type2 Improved3 3 28 Type1 Excellent4 4 52 Type1 Poor5 5 30 Type2 poor
- 增加一列
> intime<-c("1月1日","2月2日","3月3日","4月4日","5月5日")> patientdata<-cbind(patientdata,intime) #cbind是根據列進行合併,合併的前提是所有數據行數相等。> patientdata patientID age diabetes status intime1 1 25 Type1 Poor 1月1日2 2 34 Type2 Improved 2月2日3 3 28 Type1 Excellent 3月3日4 4 52 Type1 Poor 4月4日5 5 30 Type2 poor 5月5日
5.列表
一般來說,列表就是一些對象(或成分,component)的有序集合。
列如某個列表中可能是若干向量、矩陣、數據框,甚至其他列表的組合。可以使用函數list()創建列表:
mylist <- list(object1, object2, ...)
還可以為列表中的對象命名:
mylist <- list(name1=object1, name2=object2, ...)
創建一個列表
> 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"> mylist[[2]] #指那個含有四個元素的向量[1] 25 26 18 39> mylist[["ages"]] #指那個含有四個元素的向量[1] 25 26 18 39
Python語言數據結構及實例解析
接下來主要講解數組、元組、字典三個數據結構
1.列表
列表的數據項不需要具有相同的類型
創建一個列表,只要把逗號分隔的不同的數據項使用方括弧括起來即可創建列表
訪問列表中的值
列表通過insert函數插入,函數的第一個參數表示插入的索引位置,第二個表示插入的值。
或者使用append,直接在列表末尾添加上元素。
如果要刪除特定位置的元素,用pop函數。如果函數沒有選擇數值,默認刪除最後一個元素,如果有,則刪除數值對應索引的元素。
更改元素其實是不需要用到函數,直接選取元素重新賦值即可。
創建多維列表
多維列表中查找
2.元組
元組,它和數列非常相似,但是用圓括弧表示。但是它最大的特點是不能修改。
創建元組
查找和列表是相同的
3.字典
字典dict全稱dictionary,以鍵值對key-value的形式存儲。所謂鍵值,就是將key作為索引存儲,用大括弧表示。
創建字典
通過key索引來查找value值
通過賦值來修改字典
dict中刪除key和list一樣,通過pop函數。
基礎的數據類型差不多就這些了,更多的就交給實踐和谷歌吧。
推薦閱讀:
※一篇文章告訴你,該學R還是Python
※第一份數據報告的誕生
※python數據建模常用可視化總結
※[賽車知識]F1遙感數據分析——整理自網路