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遙感數據分析——整理自網路

TAG:数据分析 | 数据分析师 | Python |