主要內容
? 探索R中的數據結構
? 輸入數據
? 導入數據
? 標注數據
2.1 數據集的概念
數據集通常是由數據構成的一個矩形數組,行表示觀測,列表示變量(本書使用統計學家術語)。
數據集的行和列叫法不同,統計學家術語為觀測(observation)和變量(variable),數據庫分析師術語為記錄(record)和字段(field),數據挖掘和機器學習學科的研究者則把它們叫作示例(example)和屬性(attribute)。
表2-1,可以看到數據集的結構(矩形數組)以及其中包含的內容和數據類型。
PatientID是行/實例標識符,AdmDate是日期型變量,Age是連續型變量,Diabetes是名義型變量,Status是有序型變量。
在R中, PatientID 、 AdmDate 和 Age 為數值型變量,而 Diabetes 和 Status則為字符型變量。另外,你需要分別告訴R: PatientID 是實例標識符, AdmDate 含有日期數據,Diabetes 和 Status 分別是名義型和有序型變量。R將實例標識符稱為 rownames (行名),將類別型(包括名義型和有序型)變量稱為因子( factors )。
2.2 數據結構
R擁有許多用于存儲數據的對象類型,包括標量、向量、矩陣、數組、數據框和列表。
注意:在R中,術語 對象(object)是指可以賦值給變量的任何事物,包括常量、數據結構、函數,甚至圖形。對象都擁有某種模式,描述了此對象是如何存儲的,以及某個類。
2.2.1向量
向量是用于存儲數值型、字符型或邏輯型數據的一維數組。執行組合功能的函數 c() 可用來創建向量。各類向量如下例所示:
a <- c(1, 2, 5, 3, 6, -2, 4) #數值型向量
b <- c("one", "two", "three") #字符型向量
c <- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE) #邏輯型向量注意,單個向量中的數據必須擁有相同的類型或模式(數值型、字符型或邏輯型)。同一向量中無法混雜不同模式的數據。
如何訪問向量中的元素?通過在方括號中給定元素所處位置的數值。如下所示:
> a <- c("k", "j", "h", "a", "c", "m")
> a[3] #訪問向量中第三個元素
[1] "h"
> a[c(1, 3, 5)] #訪問向量中第一、三、五個元素
[1] "k" "h" "c"
> a[2:6] #訪問向量中第二至第六個元素
[1] "j" "h" "a" "c" "m"
2.2.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 ),默認情況下按列填充。
按行填充的2*2矩陣。
按列填充的2*2矩陣。
如上圖: 創建了一個內容為數字1到10的2×5矩陣。默認情況下,矩陣按列填充。然后,我們分別選擇了第二行和第二列的元素。接著,又選擇了第一行第四列的元素。最后選擇了位于第一行第四、第五列的元素。
矩陣都是二維的,和向量類似,矩陣中也僅能包含一種數據類型。
2.2.3 數組
數組(array)與矩陣類似,但是維度可以大于2。數組可通過 array 函數創建。
myarray <- array(cecior,dimensions,dimnames)。其中 vector( 下圖中的“1:24”) 包含了數組中的數據, dimensions (下圖中的“c(2,3,4)”)是一個數值型向量,給出了各個維度下標的最大值,而 dimnames 是可選的、各維度名稱標簽的列表。
上例中若是c(2,3,4)數值被改變則提示出錯,“length of 'dimnames' [1] not equal to array extent”。數組的維度需要符合數值型向量給出的各維度下標最大值。
像矩陣一樣,數組中的數據也只能擁有一種模式。從數組中選取元素的方式與矩陣相同。z[1,2,3]相當于A1B2C3為15。
2.2.4 數據框
由于不同的列可以包含不同模式(數值型、字符型等)的數據,數據框的概念較矩陣來說更為一般。它與你通常在SAS、SPSS和Stata中看到的數據集類似。數據框將是你在R中最常處理的數據結構。
下表所示的病例數據集包含了數值型和字符型數據。由于數據有多種模式,無法將此數據集放入一個矩陣。在這種情況下,使用數據框是最佳選擇。
數據框可通過函數 data.frame() 創建: mydata <- data.frame(col1,col2,col3,…)。其中列向量 col1 、 col2 、 col3 等可為任何類型(如字符型、數值型或邏輯型)。每一列的名稱可由函數 names 指定。
.選取數據框中元素的方式中注意$號是新出現的。它被用來選取一個給定數據框中的某個特定變量。比如:> table(patientdata$diabets,patientdata$status),表示生成糖尿病類型變量 diabetes 和病情變量 status 的列聯表。
001 attach()、detach()、和with()的使用。attach()函數可將數據框添加到R的搜索路徑中,detach()函數將數據框從搜索路徑中移除。函數 attach() 和 detach() 最好在你分析一個單獨的數據框,并且不太可能有多個同名對象時使用。with()函數用法略。
002 實例標識符
2.2.5因子
類別(名義型)變量和有序類別(有序型)變量在R中稱為因子(factor)。因子在R中非常重要,因為它決定了數據的分析方式以及如何進行視覺呈現。
名義型變量是沒有順序之分的類別變量。糖尿病類型 Diabetes ( Type1 、 Type2 )是名義型變量的一例。有序型變量表示一種順序關系,而非數量關系。病情Status ( poor 、improved 、 excellent )是順序型變量的一個示例。
具體使用如下:
2.2.6 列表
一般來說,列表就是一些對象(或成分,component)的有序集合。可以使用函數 list() 創建列表:mylist <- list(object1, object2, ...)。其中的對象可以是目前為止講到的任何結構。
list列表的重要性。首先,列表允許以一種簡單的方式組織和重新調用不相干的信息。其次,許多R函數的運行結果都是以列表的形式返回。
2.3 數據的輸入
2.3.1 使用鍵盤輸入數據。對于較大的數據集,主要從現有的文本文件、Excel電子表格、統計軟件或數據庫中導入數據。
2.3.2 從帶分隔符的文本文件導入數據。使用 read.table() 從帶分隔符的文本文件中導入數據。幫助參考help(read.table)。
2.3.3 導入 Excel 數據。函數read.xlsx() 導入一個工作表到一個數據框中。最簡單的格式是 read.xlsx(file, n)。使用install.packages("xlsx")下載xlsx包,使用以下代碼
library(xlsx)
workbook <- "c:/myworkbook.xlsx"
mydataframe <- read.xlsx(workbook, 1) 導入工作簿myworkbook.xlsx 的第一個表。
2.3.4 導入 XML 數據
2.3.5 從網頁抓取數據
2.3.6 導入 SPSS 數據。使用函數 read.spss() 導入到R中。下載安裝Hmisc 包。install.packages("Hmisc")
2.3.7 導入 SAS 數據
2.3.8 導入 Stata 數據
2.3.9 導入 NetCDF 數據
2.3.10 導入 HDF5 數據
2.3.11 訪問數據庫管理系統
2.3.12 通過 Stat/Transfer 導入數據
2.4 數據集的標注
為了使結果更易解讀,數據分析人員通常會對數據集進行標注。
2.5 處理數據對象的實用函數
創建于 2017-01-23