第二章 創(chuàng)建數(shù)據(jù)集

在本章內(nèi)容中,數(shù)據(jù)結(jié)構(gòu)是非常重要的,對(duì)于后續(xù)的數(shù)據(jù)分析起著關(guān)鍵的作用,數(shù)據(jù)結(jié)構(gòu)是可以用來(lái)存儲(chǔ)數(shù)據(jù)的。


數(shù)據(jù)結(jié)構(gòu)

2.1 數(shù)據(jù)集的概念

數(shù)據(jù)集通常是由數(shù)據(jù)構(gòu)成的一個(gè)矩形數(shù)組,行表示觀測(cè),列表示變量。
在下表中,病人編號(hào)是實(shí)例標(biāo)識(shí)符(rownames-行號(hào)),入院時(shí)間是日期型變量,年齡是連續(xù)性變量,糖尿病類型是名義型變量,病情是有序型變量
R可以處理的數(shù)據(jù)類型包括數(shù)值型、字符型、邏輯型、復(fù)數(shù)型和原生型。其中前三個(gè)變量是數(shù)值型變量,后兩個(gè)是字符型變量。

在R中,實(shí)例標(biāo)識(shí)符成為rownames,將類別型(名義型和有序型)變量成為因子(factors)

數(shù)據(jù)集示例

2.2 數(shù)據(jù)結(jié)構(gòu)

R擁有許多存儲(chǔ)數(shù)據(jù)的對(duì)象類型,包括標(biāo)量、向量、矩陣、數(shù)組、數(shù)據(jù)框和列表。
數(shù)據(jù)結(jié)構(gòu)

在R中,對(duì)象(object)是指可以賦值給變量的任何事物,包括常量、數(shù)據(jù)結(jié)構(gòu)、函數(shù)甚至圖形。數(shù)據(jù)框(data frame):可以存儲(chǔ)不同類型的變量,這是最主要的數(shù)據(jù)結(jié)構(gòu)。因子(factors):是名義型變量或有序型變量。

2.2.1 向量

向量是用于存儲(chǔ)數(shù)值型、字符型或邏輯型數(shù)據(jù)的一維數(shù)組。功能函數(shù)c()可以用來(lái)創(chuàng)建向量。

# 數(shù)值型向量a,R中在賦值時(shí),<- 的兩邊一般需要有空格
 a <- c(2, 3, 4, 5, 6)
# 字符型向量b,且字符型向量中的元素需要用“”
b <- c("one", "two", "three")
# 邏輯型向量c,注意邏輯型是大寫的,且不用“”
c <- c(TRUE, FALSE,TRUE) 

標(biāo)量是只有一個(gè)元素的向量,用于保存常量;同一向量中,數(shù)據(jù)必須是相同類型的,不能混雜。

通過(guò)方括號(hào)來(lái)訪問(wèn)向量中的元素

a <- c(1, 2, 5, 3, 6, -2, 4)
# 表示取第三個(gè)元素,是5
a[3]
# 表示取1,3,5位置的元素,是1,5,6
a[c(1, 3, 5)]
# 表示取第2,3,4,5,6位置的元素
a[2:6]   

2.2.2 矩陣

是一個(gè)二維數(shù)組,每個(gè)元素都擁有相同的模式,可通過(guò)matrix()創(chuàng)建矩陣。矩陣元素的選擇,可以使用下標(biāo)和方括號(hào)來(lái)進(jìn)行。X[i, j],用來(lái)選擇矩陣X中的第i行和第j列的元素。

# 創(chuàng)建一個(gè)5行4列的矩陣,nrow指定行數(shù),ncol指定列數(shù)
y <- matrix(1:20, nrow=5, ncol=4)
y
# cells向量,創(chuàng)建一個(gè)2x2的矩陣,rnames指定行名,cnames指定列名,byrow來(lái)確定按行創(chuàng)建還是按列創(chuàng)建矩陣,默認(rèn)是按列填充。
cells    <- c(1,26,24,68)
rnames   <- c("R1", "R2")
cnames   <- c("C1", "C2") 
mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=TRUE)

矩陣和向量類似,只能包含一種數(shù)據(jù)結(jié)構(gòu),且都是二維的。

2.2.3 數(shù)組

數(shù)組與矩陣類似,但是維度可以大于2。可以用array()來(lái)創(chuàng)建數(shù)組。

dim1 <- c("A1", "A2")
dim2 <- c("B1", "B2", "B3")
dim3 <- c("C1", "C2", "C3", "C4")
# 1:24是矩陣數(shù)據(jù),向量c(2,3,4)代表數(shù)組的維數(shù)向量--2行3列4個(gè)矩陣的組合,dimnames各維名稱構(gòu)成的向量或列表,缺省值維空
z <- array(1:24, c(2,3,4), dimnames=list(dim1, dim2, dim3))

2.2.4 數(shù)據(jù)框

數(shù)據(jù)框由于不同的列可以包含不同模式的數(shù)據(jù),比矩陣更具有一般性。它將是在R中最常處理的數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)框可以通過(guò)data.frame()函數(shù)來(lái)創(chuàng)建。
patientdata <- data.frame(patientID, age, diabetes, status)

  • 數(shù)據(jù)框元素的選取:
    可以用下標(biāo)記號(hào),或直接指定列名。patientdata[1:2] 選取其中的第一和第二列的數(shù)據(jù);或者patientdata[c("diabetes", "status")]選取這兩列的數(shù)據(jù)。也可以使用$符號(hào)來(lái)表示某個(gè)變量,patientdata$age被用來(lái)選取變量age的元素。

為了方便使用變量,而不用每次都鍵入一次patientdata$,可以聯(lián)合使用attach()和detach()。但是要注意的是:如果環(huán)境中在你attach數(shù)據(jù)框之前已經(jīng)有一個(gè)相同的變量了,那么就會(huì)出現(xiàn)錯(cuò)誤。
此外,with(data.frame, {code}),這個(gè)函數(shù)就不會(huì)出現(xiàn)上述的錯(cuò)誤,因?yàn)榛ɡㄌ?hào)中的代碼只是針對(duì)次數(shù)據(jù)框。然而,with()函數(shù)的局限在于,此函數(shù)內(nèi)的賦值在全局環(huán)境中沒(méi)法使用,只是在此函數(shù)中有作用。解決辦法就是用特殊賦值符號(hào)<<- 代替標(biāo)準(zhǔn)賦值符號(hào)<-就可以全局使用。

2.2.5 因子

變量可以分為三類:名義型、有序型和連續(xù)性變量。

  • 名義型變量:是沒(méi)有順序之分的類別變量,糖尿病類型(type1,type2)就是名義型變量。
  • 有序型變量:表示一種順序關(guān)系,而非數(shù)量關(guān)系,病情(poor,improved,excellent)就是一個(gè)很好的例子。
  • 連續(xù)型變量:可以呈現(xiàn)為某個(gè)范圍內(nèi)的任一值,并同時(shí)表示順序和數(shù)量。年齡就是這樣的例子。

因子:是名義型變量和有序型變量的統(tǒng)稱,在R中,非常重要。它決定了數(shù)據(jù)的分析方式以及如何進(jìn)行視覺(jué)呈現(xiàn)。
函數(shù)factor()以一個(gè)整數(shù)向量的形式存儲(chǔ)類別值,同時(shí)一個(gè)由字符串(原始值)組成的內(nèi)部向量映射到這些整數(shù)上。

原始的向量diabetes <- c("type1", type2", type1", type1"),通過(guò)diabetes <- factor(diabetes)將名義型向量存儲(chǔ)為整數(shù)向量(1, 2, 1, 1),并在內(nèi)部將其關(guān)聯(lián)為1=type1和2=type2,并且會(huì)將關(guān)于此向量的任何分析都會(huì)作為名義型變量對(duì)待。
有序型向量,需要再指定參數(shù)ordered=TRUE:status <- c("poor", "improved", "excellent", "poor")通過(guò)語(yǔ)句status <- factor(status, ordered=TRUE)會(huì)將向量編碼為(3,2,1,3),并同樣在內(nèi)部建立關(guān)聯(lián)1=excellent、2=improved和3=poor。字符型向量的因子水平是默認(rèn)通過(guò)字母順序建立,因此一般我們都通過(guò)levels參數(shù)來(lái)指定需要的順序。

  • 因子的使用
patientID <- c(1, 2, 3, 4)
age <- c(25, 34, 28, 52)
diabetes <- c("Type1", "Type2", "Type1", "Type1")
status <- c("Poor", "Improved", "Excellent", "Poor")
diabetes <- factor(diabetes)
status <- factor(status, order=TRUE)
patientdata <- data.frame(patientID, age, diabetes, status)
# str()函數(shù)可以查看數(shù)據(jù)集的結(jié)構(gòu),包括多少個(gè)變量和多少個(gè)觀測(cè)值
str(patientdata)   
# 顯示描述性的統(tǒng)計(jì)信息                            
summary(patientdata)

str()和summary()結(jié)果的說(shuō)明:
str()提供R中某個(gè)對(duì)象的信息,圖中顯示這個(gè)對(duì)象是data.frame:4個(gè)變量,每個(gè)變量有4個(gè)觀測(cè)值。還列出了各個(gè)變量的類型,有數(shù)值型變量,因子(名義型變量)和有序因子(有序型變量)以及水平。
summary()提供數(shù)據(jù)的統(tǒng)計(jì)信息,會(huì)區(qū)別對(duì)待各個(gè)變量。顯示了連續(xù)型變量的最大值、最小值、均值和各四分位數(shù),并顯示類別型變量的頻數(shù)值。

str()和summary()結(jié)果

2.2.6 列表

列表(list)是R的數(shù)據(jù)類型中最為復(fù)雜的一種。list()用來(lái)創(chuàng)建列表,列表中可以是目前為止的所有結(jié)構(gòu)。下面的列表有4個(gè)對(duì)象:一個(gè)字符串,一個(gè)數(shù)值型向量,一個(gè)矩陣以及一個(gè)字符型向量。
列表元素的訪問(wèn):可以通過(guò)雙重方括號(hào)[[2]]中指明代表某個(gè)對(duì)象的數(shù)字或名稱來(lái)訪問(wèn)。也可以用$來(lái)取得某個(gè)對(duì)象。

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

2.3 數(shù)據(jù)的輸入

R的數(shù)據(jù)源

2.3.1 使用鍵盤輸入數(shù)據(jù)

最常見的方式有兩種:用R內(nèi)置的文本編輯器和直接在代碼中嵌入數(shù)據(jù),一般首先考慮文本編輯器。edit()函數(shù)會(huì)自動(dòng)調(diào)用一個(gè)手動(dòng)輸入數(shù)據(jù)的文本編輯器。

  1. 創(chuàng)建空數(shù)據(jù)框:mydata <- data.frame(age=numeric(0), gender=character(0), weight=numeric(0))
  2. 調(diào)用編輯器:mydata <- edit(mydata)或者fix(mydata),鍵入你的數(shù)據(jù),關(guān)閉編輯器,自動(dòng)保存。
  • 直接在代碼中嵌入
mydatatxt <- "
age gender weight
25 m 166
30 f 115
18 f 120
"
mydata <- read.table(header=TRUE, text=mydatatxt)

然而,這種方式只適合小數(shù)據(jù)的處理。

2.3.2 從帶分隔符的文本文件導(dǎo)入數(shù)據(jù)

可以使用read.table()從帶分隔符的文本文件中導(dǎo)入數(shù)據(jù),并可讀入一個(gè)表格格式的文件,將其保存為一個(gè)數(shù)據(jù)框。語(yǔ)法:
mydata <- read.table(file, options)
file是一個(gè)帶分隔符的ASCII文本文件,options是控制如何處理數(shù)據(jù)的選項(xiàng)。如下:

header:文件的第一行是否包含了變量名的邏輯型變量。
seq:用來(lái)指定讀取某種分隔符的文件,如seq=“,”來(lái)讀取用逗號(hào)來(lái)分割的行內(nèi)數(shù)據(jù)的文件。
row.names:用于一個(gè)或多個(gè)的行標(biāo)識(shí)符。
col.names:如果不包括列變量名,可以用此選項(xiàng)來(lái)指定。
colClasses:用來(lái)指定每一列的數(shù)據(jù)類型。
stringAsFactors:一個(gè)邏輯變量,是夠要將字符轉(zhuǎn)化成為因子,默認(rèn)是轉(zhuǎn)化為因子。

2.3.2 導(dǎo)入Excel數(shù)據(jù)

讀取一個(gè)Excel文件的最好方式,就是在Excel中將其導(dǎo)出為一個(gè)逗號(hào)分隔文件csv,并使用read.table()將其導(dǎo)入到R中。也可以安裝xlsx包,直接導(dǎo)入Excel工作表。
其他還有很多導(dǎo)入數(shù)據(jù)的方式,如從網(wǎng)頁(yè)抓取數(shù)據(jù)、SPSS導(dǎo)入數(shù)據(jù)、導(dǎo)入數(shù)據(jù)和數(shù)據(jù)庫(kù)系統(tǒng)導(dǎo)入數(shù)據(jù)等等。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容