- R語言數(shù)據(jù)可視化之美:專業(yè)圖表繪制指南
- 張杰
- 1881字
- 2019-09-20 14:52:41
1.4.2 數(shù)據(jù)結(jié)構(gòu)
常見的數(shù)據(jù)結(jié)構(gòu)包括:向量(vector)、數(shù)據(jù)框(data.frame)、矩陣(matrix)、列表(list)和數(shù)組(array)。其中,矩陣是將數(shù)據(jù)用行和列排列的長(zhǎng)方形表格,它是二維的數(shù)組,其單元必須是相同的數(shù)據(jù)類型,通常用列來表示不同的變量,用行表示各個(gè)對(duì)象;數(shù)組可以看作是帶有多個(gè)下標(biāo)的類型相同的元素的集合;列表是一個(gè)對(duì)象的有序集合構(gòu)成的對(duì)象,列表中包含的對(duì)象又稱為它的分量(component),分量可以是不同的模式或(和)類型。我們?cè)诒緯臄?shù)據(jù)可視化中,比較常用的是向量(因子屬于特殊的向量)和數(shù)據(jù)框,所以我們重點(diǎn)介紹這兩種類型的數(shù)據(jù)結(jié)構(gòu),還將介紹與數(shù)據(jù)可視化密切相關(guān)的函數(shù)。
1.向量
向量是用于存儲(chǔ)數(shù)值型、字符型或邏輯型數(shù)據(jù)的一維數(shù)組。執(zhí)行組合功能的函數(shù)c()可用來創(chuàng)建向量(c代表合并:combine)。值得注意的是,單個(gè)向量中的數(shù)據(jù)類型是固定的,比如數(shù)值型向量中的元素就必須全為向量。量是R語言中最基本的數(shù)據(jù)結(jié)構(gòu),其他類型的數(shù)據(jù)結(jié)構(gòu)都可以由向量構(gòu)成。最常見的向量有三種類型:數(shù)值型、字符型、邏輯型。
(1)向量的創(chuàng)建
向量的創(chuàng)建有多種方法,我們既可以手動(dòng)輸入,使用函數(shù)c()創(chuàng)建向量;也可以使用現(xiàn)有的函數(shù)創(chuàng)建向量,比如seq()、rep()等函數(shù),具體如表1-4-1所示。
表1-4-1 向量的創(chuàng)建

(2)向量的處理
封面
結(jié)果order包括兩部分:$x為[5 4 3 2 1], $ix為[4 2 3 5 1]。
Vec<-c(1,4,3,5,2) order<-sort(Vec, index.return=TRUE, decreasing = TRUE)
●向量的唯一值。unique()函數(shù)主要是返回一個(gè)刪除了把重復(fù)元素或行的向量、數(shù)據(jù)框或數(shù)組。在需要對(duì)數(shù)據(jù)框根據(jù)某列進(jìn)行分組運(yùn)算時(shí),需要使用該函數(shù)先獲取類別總數(shù)。
Vec<-c("peter", "jack", "peter", "jack", "eelin") Uni<-unique(Vec) #輸出:"peter","jack","eelin"
●連續(xù)向量的離散化。在做數(shù)據(jù)挖掘模型時(shí),我們有時(shí)會(huì)需要把連續(xù)型變量轉(zhuǎn)換為離散型變量,這種轉(zhuǎn)換的過程就是數(shù)據(jù)離散化,分箱就是離散化常用的一種方法。數(shù)據(jù)離散化最簡(jiǎn)單的方法就是使用cut()函數(shù)自定義離散區(qū)間,從而對(duì)數(shù)據(jù)進(jìn)行離散處理。
Num_Vector<- c(10, 5, 4, 7, 6, 1, 4, 8, 8, 5) Cut_Vector<-cut(Num_Vector, breaks=c(0,3,6,9,11), labels=c("0~3", "3~6", "6~9", ">9"), right = TRUE) # 輸出結(jié)果為因子向量:>9, 3~6, 3~6, 6~9, 3~6, 0~3, 3~6, 6~9, 6~9, 3~6;其水平Levels為: 0~3, 3~6, 6~9,>9
(3)向量的索引
向量是多個(gè)元素的集合,當(dāng)我們只需要指定或者說提取該向量中的某個(gè)元素時(shí),就可以使用向量的索引(indexing)。向量元素有三種基本類型的向量索引:整數(shù)型,索引的是元素位置;字符型,索引的是名稱屬性;邏輯型,索引的是相同長(zhǎng)度的邏輯向量對(duì)應(yīng)的邏輯值為真的元素。
x<-c(1,4,3,5,2)
●整數(shù)型索引,選擇某個(gè)或多個(gè)元素:x[2]; x[-2]; x[2:4]; x[c(1,4)]
●邏輯型索引,邏輯運(yùn)算選擇元素:x[x>2]; x[x==1]; x[x<=5]
2.因子
因子(factor)是R語言中許多強(qiáng)大運(yùn)算的基礎(chǔ),包括許多針對(duì)表格數(shù)據(jù)的運(yùn)算,可分為類別型變量和有序型變量。因子可以看成是包含了額外信息的向量,這額外的信息就是不同的類別,稱之為水平(level)。因子在R中非常重要,因?yàn)樗鼪Q定了數(shù)據(jù)的分析方式,以及如何進(jìn)行視覺呈現(xiàn)。
(1)因子的創(chuàng)建
一個(gè)因子不僅包括分類變量本身,還包括變量不同的可能水平(即使它們?cè)跀?shù)據(jù)中不出現(xiàn))。因子函數(shù)factor()用下面的選項(xiàng)創(chuàng)建一個(gè)因子。對(duì)于字符型向量,因子的水平默認(rèn)依字母順序創(chuàng)建:
(Fair, Good, Ideal, Premium, Very Good) Cut<-c("Fair", "Good", "Very Good", "Premium", "Ideal") Cut_Facor1<-as.factor(Cut)
(2)水平的更改
很多時(shí)候,按默認(rèn)的字母順序排序的因子很少能夠讓人滿意。因此,可以指定levels選項(xiàng)來覆蓋默認(rèn)排序。更改因子向量的levels為("Good", "Fair", "Very Good", "Ideal", "Premium"),就需要使用factor()函數(shù)更改levels。
Cut_Facor2<-factor(x=c("Fair", "Good", "Very Good", "Premium", "Ideal"), levels= c("Good", "Fair", "Very Good", "Ideal", "Premium"), ordered=TRUE)
(3)類型的轉(zhuǎn)換
數(shù)值型因子向量的類型變換。有時(shí)候我們需要將數(shù)值型的因子向量重新轉(zhuǎn)換成數(shù)值型向量,這時(shí),我們需要使用as.numeric(as.character())組合函數(shù),而不能直接使用as.numeric()函數(shù)。其中as.character()函數(shù)表示將向量變成字符型,as.numeric()函數(shù)表示將向量變成數(shù)值型。
Num _Facor<-factor(x=c(1,3,5,2), levels= c(5,3,2,1), ordered=TRUE) Num_Vector1<-as.numeric(as.character(Num_Facor)) # 輸出:1 3 5 2 Num_Vector2<-as.numeric(Num_Facor) # 輸出:4 2 1 3
3.?dāng)?shù)據(jù)框
數(shù)據(jù)框是R語言中的一個(gè)種表格結(jié)構(gòu),對(duì)應(yīng)于數(shù)據(jù)庫中的表,類似Excel中的數(shù)據(jù)表。數(shù)據(jù)框是由多個(gè)向量構(gòu)成的,每個(gè)向量的長(zhǎng)度相同。數(shù)據(jù)框類似矩陣,也是一個(gè)二維表結(jié)構(gòu)。在統(tǒng)計(jì)學(xué)術(shù)語中,用行來表示觀測(cè)(observation),用列來表示變量(variable)。
(1)數(shù)據(jù)框的創(chuàng)建與查看
創(chuàng)建數(shù)據(jù)框,最簡(jiǎn)單的方法就是,用同名的定義函數(shù)data.frame(),輸入每個(gè)變量的名稱及對(duì)應(yīng)的向量,每個(gè)向量的長(zhǎng)度相同。一個(gè)數(shù)據(jù)框可能包含多個(gè)變量(向量),有時(shí)需要單獨(dú)提取某個(gè)變量,使用特殊的$符號(hào)來訪問,由“數(shù)據(jù)框$變量名”構(gòu)成。數(shù)據(jù)框數(shù)據(jù)的選取如表1-4-2所示。
表1-4-2 數(shù)據(jù)框數(shù)據(jù)的選取

●獲取數(shù)據(jù)框的行數(shù)、列數(shù)和維數(shù):nrow()、ncol()、dim()。●獲取數(shù)據(jù)框的列名或行名:names()、rownames()、colnames();重新定義列名:names(df)<-c("X","Y", "Z")。
●觀察數(shù)據(jù)框的內(nèi)容:view(df)、head(df, n=3)、tail(df)。
(2)空數(shù)據(jù)框的創(chuàng)建
創(chuàng)建空數(shù)據(jù)框,在需要自己構(gòu)造繪圖的數(shù)據(jù)框數(shù)據(jù)信息時(shí)尤為重要。有時(shí)候,繪制復(fù)雜的數(shù)據(jù)圖表的過程中,我們需要對(duì)現(xiàn)有的數(shù)據(jù)進(jìn)行插值、擬合等處理時(shí),需要使用空的數(shù)據(jù)框儲(chǔ)存新的數(shù)據(jù),最后使用新的數(shù)據(jù)框繪制圖表。創(chuàng)建空的數(shù)據(jù)框主要有如下兩種方法。
●創(chuàng)建一個(gè)名為Df_Empty,包括兩個(gè)變量(var_a為numeric類型;var_b為character類型)的data.frame。但是注意:要加上stringsAsFactors=FALSE,否則在后面逐行輸入數(shù)據(jù)時(shí),會(huì)因?yàn)関ar_b的取值未經(jīng)定義的factor level而報(bào)錯(cuò)。
Df_Empty1<- data.frame(var_a = numeric(), var_b = character(), stringsAsFactors=FALSE)
●先使用矩陣創(chuàng)建空的數(shù)據(jù)框,同時(shí)通過dimnames設(shè)定數(shù)據(jù)框的列名。這個(gè)相比于前一種方法可以更快速地創(chuàng)建多列空數(shù)據(jù)框:
Df_Empty2 <- data.frame(matrix(ncol=2, nrow=0, dimnames=list(c(), c("var_a", "var_b"))))
- Java應(yīng)用開發(fā)與實(shí)踐
- 人臉識(shí)別原理及算法:動(dòng)態(tài)人臉識(shí)別系統(tǒng)研究
- GeoServer Beginner's Guide(Second Edition)
- TypeScript項(xiàng)目開發(fā)實(shí)戰(zhàn)
- Serverless computing in Azure with .NET
- 執(zhí)劍而舞:用代碼創(chuàng)作藝術(shù)
- 編寫高質(zhì)量代碼:改善Objective-C程序的61個(gè)建議
- 小型編譯器設(shè)計(jì)實(shí)踐
- 從零開始學(xué)Python網(wǎng)絡(luò)爬蟲
- 自學(xué)Python:編程基礎(chǔ)、科學(xué)計(jì)算及數(shù)據(jù)分析(第2版)
- PHP 8從入門到精通(視頻教學(xué)版)
- AMP:Building Accelerated Mobile Pages
- Python機(jī)器學(xué)習(xí)與量化投資
- Getting Started with Electronic Projects
- 交互設(shè)計(jì)師成長(zhǎng)手冊(cè):從零開始學(xué)交互