一日之計(jì)在于晨,這里是更新的佳奧。
(今天虹團(tuán)的Eutopia、stars we chase、EMOTION可以聽了,開心)
前兩篇的內(nèi)容我們初步掌握了R的主要功能和使用方法,從這一篇開始我們要學(xué)習(xí)R中的數(shù)據(jù)結(jié)構(gòu)以及如何輸入數(shù)據(jù)、導(dǎo)入數(shù)據(jù)等,那么我們開始吧!
1 數(shù)據(jù)集的概念
數(shù)據(jù)構(gòu)成的矩形數(shù)組稱為數(shù)據(jù)集。舉個(gè)例子:

對(duì)于統(tǒng)計(jì)學(xué)家,數(shù)據(jù)集的行和列分被稱為觀測(cè)observation和變量variable。
在這個(gè)表格中,PatientID是行/實(shí)例標(biāo)識(shí)符,AdmDate是日期型變量,Age是連續(xù)性變量,Diabetes是名義型變量,Status是有序型變量。
R可以處理的數(shù)據(jù)類型(模式)包括數(shù)值型、字符型、邏輯性(true/false)、復(fù)數(shù)型和原生型(字節(jié))。
其中,表格里的PatientID、AdmDate和Age是數(shù)值型變量,Diabetes和Status為字符型變量。另外,PatientID是實(shí)例標(biāo)識(shí)符,AdmDate含有日期數(shù)據(jù),Diabetes和Status分別是名義型和有序變量。
R將實(shí)力標(biāo)識(shí)符稱為行名rownames,將類別型(名義型、有序型)變量稱為因子factors。
2 數(shù)據(jù)結(jié)構(gòu)
有點(diǎn)繞,但后面的內(nèi)容也很重要。
R擁有多種存儲(chǔ)數(shù)據(jù)的對(duì)象類型,包括標(biāo)量、向量、矩陣、數(shù)組、數(shù)據(jù)框和列表。
在R中,對(duì)象object是指可以賦值給變量的任何事物,包括常量、數(shù)據(jù)結(jié)構(gòu)、函數(shù)和圖形。
數(shù)據(jù)框data frame是R中用于儲(chǔ)存數(shù)據(jù)的一種結(jié)構(gòu):列表示變量,行表示觀測(cè)。而數(shù)據(jù)框?qū)⑹俏磥泶鎯?chǔ)數(shù)據(jù)集的主要數(shù)據(jù)結(jié)構(gòu)。
這里引用書里對(duì)R數(shù)據(jù)結(jié)構(gòu)的圖示:

2.1 向量
先明確什么是標(biāo)量。標(biāo)量是只含有一個(gè)元素的向量,如 f <- 3、g <- "US"、h <- TRUE。標(biāo)量用于保存常量。
向量是,用于存儲(chǔ)數(shù)值型、字符型或邏輯性的一組數(shù)據(jù)。
如:

注意,同一向量中無法混雜不同模式的數(shù)據(jù)。
譯者注:最好不要在編碼時(shí)使用c作為對(duì)象名。
我們可以通過一定格式來訪問特定位置的元素:

2.2 矩陣
向量很簡單吧?那么矩陣也是一樣的意思。加一個(gè)維度,讓我們繼續(xù)。
矩陣就是一個(gè)二維數(shù)組,每個(gè)元素都擁有相同模式。通過函數(shù)matrix創(chuàng)建矩陣:

注釋寫在這里吧,寫在里面太擠了。
vector:矩陣?yán)锏脑亍?/p>
nrow、ncol:用以指定行和列的維數(shù)。
dimnames:包含了可選的、以字符型向量表示的行名和列名。
選項(xiàng)byrow:表明矩陣應(yīng)當(dāng)按行填充(byrow=TRUE)還是按列填充(byrow=FALSE),默認(rèn)情況下按列填充。
講多了有點(diǎn)暈,還是從實(shí)例中理解吧:


我們還可以使用下標(biāo)和方括號(hào)來選擇矩陣中的行、列或元素。x[ i, j ]指的是第i行第j個(gè)元素。舉例:

大致就是這樣。
2.3 數(shù)組
不是特別重要,大致理解吧。數(shù)組array的維度可以大于2。
創(chuàng)建數(shù)組使用函數(shù)array,形式如下:

vector:包含了數(shù)組中的數(shù)據(jù)。
dimensions:數(shù)值型向量,給出了各個(gè)維度下標(biāo)的最大值。
dimnames:可選的、各維度名稱標(biāo)簽的列表。
舉個(gè)例子吧:



2.4 數(shù)據(jù)框
稍微休息一下,數(shù)據(jù)框是R中最長處理的數(shù)據(jù)結(jié)構(gòu),也是當(dāng)前入門最重要的理解部分。
數(shù)據(jù)框的不同列可以包含不同的模式數(shù)據(jù),有一些像SPSS里面的數(shù)據(jù)集。
數(shù)據(jù)集可以通過函數(shù)data.frame( )創(chuàng)建:

其中,列向量col1、col2、col3可以為任何類型(字符型、數(shù)值型、邏輯型等)。每一列的名稱都可以由函數(shù)names指定。下面是一個(gè)演示:

不要著急,還有如何從數(shù)據(jù)框中選取元素。


普通的例子列舉完了,以下是新的記號(hào):

$這個(gè)記號(hào)是新出現(xiàn)的,它被用來選取一個(gè)給定數(shù)據(jù)框的某一特定變量。
舉個(gè)例子(今天的例子挺多的),想生成糖尿病類型變量diabetes和病情變量status的列聯(lián)表,可以使用下列代碼:

那么,書上繼續(xù)說了,每個(gè)變量前鍵入¥有些麻煩,不妨走些捷徑,所以接下來接著學(xué)習(xí)使用函數(shù)attach( )、detach( )和單獨(dú)使用函數(shù)with( )來簡化代碼。(要學(xué)的東西增加了)
這里需要用一下之前的mtcars數(shù)據(jù)框。
我想要繪制每加侖行駛英里數(shù)mpg變量的描述性統(tǒng)計(jì)量,并分別繪制此變量與發(fā)動(dòng)機(jī)排量disp和車身重量wt的散點(diǎn)圖:

好吧頻繁敲$確實(shí)挺累的,那么簡化的代碼是什么樣的呢?

確實(shí),簡潔。
函數(shù)detach( )將數(shù)據(jù)框從搜索路徑中移除。這個(gè)函數(shù)不會(huì)對(duì)原本數(shù)據(jù)框做任何修改。
函數(shù)attach( )和detach( )最好在分析一個(gè)單獨(dú)數(shù)據(jù)框,而沒有太多同名對(duì)象中使用,以防止環(huán)境中有一個(gè)同名對(duì)象。
另一個(gè)方法,是使用with( )函數(shù),上例可以這樣重寫:

這種情況下,大括號(hào){ }之間的語句都是針對(duì)數(shù)據(jù)框mtcars執(zhí)行。如果只有一條語句summary(mpg),那么大括號(hào)可以省略。
函數(shù)with( )也有局限性,賦值只能在函數(shù)的括號(hào)內(nèi)生效,如果需要?jiǎng)?chuàng)建with()結(jié)構(gòu)以外存在的對(duì)象,使用特殊賦值符<<- 來代替標(biāo)準(zhǔn)賦值符<-即可。它可以將對(duì)象保存到with()以外的全局環(huán)境中。

使用這兩種函數(shù)是習(xí)慣問題,多數(shù)書本傾向推薦with( )罷了。
那么實(shí)例標(biāo)識(shí)符又是什么呢?
病例數(shù)據(jù)中,病人編號(hào)patientID用于區(qū)分?jǐn)?shù)據(jù)集中的不同個(gè)體,在R中實(shí)例標(biāo)識(shí)符case identifier可通過數(shù)據(jù)框操作函數(shù)rowname選項(xiàng)指定,例如:

我們就將patientID指定為R中標(biāo)記各類實(shí)例名稱所用的變量。
掌握了以上內(nèi)容,我們就需要對(duì)數(shù)據(jù)的內(nèi)部關(guān)系進(jìn)行進(jìn)一步了解與分析。
2.5 因子
因子的重要性不亞于新開一篇,限于篇幅只能在這里展開。
我們先前接觸了不少變量,其中變量歸結(jié)為名義型、有序型和連續(xù)變量。
名義型:沒有順序之分的類別變量。糖尿病類型Diabates(Type 1、Type)就是。
有序型變量表示一種順序關(guān)系,而非順序關(guān)系:病情Status(poor, improved, excellent)就是。
連續(xù)型變量例如Age,能夠表示任意數(shù)值。
名義型變量和有序型變量在R中稱為因子factor。因子非常重要,它決定了數(shù)據(jù)的分析方式以及如何進(jìn)行視覺呈現(xiàn)。
舉個(gè)例子,假設(shè)有向量:

語句diabetes <- factor(diabetes)會(huì)將此向量儲(chǔ)存為(1,2,1),并在內(nèi)部關(guān)聯(lián)為1=Type1,2=Type2。針對(duì)向量diabetes進(jìn)行的分析都會(huì)將其作為名義型變量對(duì)待。
如果要表示有序型變量,需要函數(shù)factor( )指定參數(shù)ordered=TRUE。給定向量:

語句status <- factor(status, ordered=TRUE)會(huì)將此向量編碼為(3,2,1),并在內(nèi)部將這些值關(guān)聯(lián)為:3=Poor, 2=Improved, 1=Excellent。針對(duì)此向量的任何分析都將會(huì)作為有序型變量對(duì)待。
對(duì)于字符型向量,因子的水平默認(rèn)依據(jù)字母順序創(chuàng)建。因此可以通過指定levels選項(xiàng)來覆蓋默認(rèn)順序:

各水平的賦值將為1=Poor、2=Improved、3=Excellent。
這樣就會(huì)保證指定的水平與數(shù)據(jù)中的真實(shí)值相匹配。
下列的例子是因子的使用:

2.6 列表
列表list是R的數(shù)據(jù)類型中最為復(fù)雜的一種。
列表:對(duì)象(或成分,component)的有序集合。
列表允許整合若干對(duì)象到單個(gè)對(duì)象名下。例如,某個(gè)列表中可能是若干向量、矩陣、數(shù)據(jù)框,甚至其他列表的組合??梢允褂煤瘮?shù)list( )創(chuàng)建列表。

那么舉個(gè)例子吧。

本列表有四個(gè)成分:一個(gè)字符串、一個(gè)數(shù)值型向量、一個(gè)矩陣以及一個(gè)字符型向量。
可以通過在雙重方括號(hào)中指明代表某個(gè)成分的數(shù)字或名稱來訪問列表中的元素。此例中,mylist[[2]]和mylist[["ages"]]均指那個(gè)含有四個(gè)元素的向量。
一些補(bǔ)充:R中的下標(biāo)不從0開始,而從1開始。
篇幅原因今天先學(xué)習(xí)到這里,明天我們學(xué)一些輕松的,關(guān)于數(shù)據(jù)如何導(dǎo)入R,數(shù)據(jù)集的標(biāo)注以及一些實(shí)用函數(shù)。初步理解了數(shù)據(jù)以后我們將開始圖形初階繪制學(xué)習(xí)。
感謝看到這里,那么我們,下篇再見!