一、數據集
數據集的概念
數據集是由數據組成的矩陣數組,<font color=#ea4335 紅色 size=3>行表示觀測(observation),列表示變量(variable)
數據類型
- 數值型變量
PatientID、AdmData、Age 為數值型變量 - 字符型變量
Diabetes、Status則為字符型變量 - 邏輯型變量
- 復數型變量
- 原生型(字節)
另外,PatientID 是實例標識符,AdmData 含有日期數據。
Diabetes 和 Status 則為字符型變量,並且分別為名義型和有序型變量
R 將實例標識符稱為rownames,將類別型(包括名義型與有序型)變量稱為因子
二、數據結構
1. 向量
向量是用於儲存數值型、字符型或邏輯型數據的一維數組。執行組合功能的函數c()
可用來創建向量
a<-c(1,2,3,4,5,6,7)
注意,單個向量中數據必須是一樣的數據類型;標量是只有一個元素的向量,例如 f<- 3、g<-"US"
<font color=#ea4335 紅色 size=3>通過在方括號中給定元素所處位置的數值,可以訪問向量中的元素,即方括號內是元素的索引
2. 矩陣
矩陣是一個二維數組,即能儲存兩個維度的向量,其中每個元素的坐標是有兩個的。但需要注意的是,其中每個元素都擁有相同的模式,一般通過函數matrix()
來創建矩陣。一般的格式為:
mymatrix <- matrix(vector, nrow= number_of_rows, ncol= number_of_columns,
+ byrow = logical_value,
+ dinames= list(char_vector_rownames, char_vector_colnames))
其中,vector 即為包含了矩陣中元素的向量,nrow & ncol 是指定了行數和列數,一個房子的建成,除了框架搭好,磚頭砌上的方式也有講究,byrow 則告訴 R 是以行的順序添加元素,還是以列的順序添加。dinames 則告訴了每行每列的名稱。
可以使用下標和中括號來選擇矩陣中的行、列或元素。
X[i,]
指定了矩陣 X 中的第 i 行等等。
3. 數組
數組(array)類似於矩陣,但是它的維度可以大於 2。數組可以依如下格式創建:
myarray <- array(vector, dimensions, dinames)
dimensions 指定了每個維度下標的最大值
從數組中選取元素的方式也是依靠中括號
4. 數據框
數據框的限制相對較小,每一列的數據模式均可不同,可通過data.frame()
創建
mydata<- data.frame(col1, col2, col3)
注意,這里的col1, col2, col3 會直接被當做列名,若要修改列名可用函數
names()
來修改,如:
names(mydata)[1] <-"k"
這樣就可以將第一列的列名修改為“k”了
選取數據框中的特定元素
通過美元符號$ 來選取一個數據框內的特點變量如mydata$a
沒個變量名前都要輸入數據框的名稱可能會有些繁瑣,但也清楚的表示了是哪個數據集中的變量點明了歸屬。如果想省去這一步,可以利用下列幾個函數
attach(),detach(), with()
實例標識符(case identifier)
可以在 data.frame()中,rowname 中指定哪個列為實例
5. 因子
變量有以下幾種類型
- 名義型
如"type1"等等 - 有序型
如“first”等等,內在有先后順序的關系 - 連續型
年齡 “Age”
而類別(名義型)變量和有序變量在 R 中稱為因子
函數factor()
存儲類別值以一個整數向量的形式,整數的取值范圍是[1...k](注意 k 是名義型變量中唯一值的個數),同時一個由字符串(原始值)組成的內部向量將映射到這些整數上。
舉一個例子
diabetes <- c("type1", "type2", "type1","type1")
語句diabetes <- factor(diabetes)
將向量儲存為(1, 2, 1, 1),並在內部將其關聯為 1 = type1, 2= type2 等。(根據字母順序而定)。 並且在后續分析中,會將其作為名義型變量對待
而有序型變量的表示僅需在 factor()
函數中,指定參數ordered = TRUE
即可
但是由於因子的水平,即序列的先后順序是依據字母的先后順序,所以默認的排序可能不是我們想要的。這時候我們可以使用參數levels
選項來覆蓋默認排序
status <- factor(status, ordered = TRUE, levels = c("Poor","Improved","Excellent"))
這時候,levels 的參數相當於直接將向量 c 投影在向量c(1,2,3)
上,各水平的賦值為,1 = Poor, 2 = Improved, 3 = Excellent。需要注意的是,保證 levels 中指定的水平需要與數據中的真實值相匹配,若在數據中出現了參數中未出現的數據都將設為缺失值
如果,在數據中,例如男性女性性別這一列,數據被以 1、2 編碼,則可以利用以下語句將變量轉換為一個無序因子
sex <- factor(sex, levels = c(1,2), labels = c("Male", "Female"))
這個例子中,參數 levels 的作用是給標簽定位的,各水平相當於按順序賦值給 Male 和 Female
6. 列表
列表是最復雜的一種數據結構,某個列表可以是若干向量、矩陣、數據框,甚至其他列表的組合。可以使用list()
函數創建列表:
mylist <- list(name1 = object1, name2 = object2)
訪問列表的方式與以上幾種不太一樣,在這里通過雙重方括號中指明代表某個成分的數字或名稱來訪問列表中的元素
mylist <- list(title = g, ages = h, j, k)
#以下兩種訪問方式輸出結果一致
mylist[[2]]
mylist[["ages"]]
三、數據的輸入
最為簡單的一種可視化輸入方法即用fix()
函數,直接用鍵盤來輸入數據
當然比較常用的一個輸入數據的函數是read.table()
里面涉及到比較多的參數,下面一一列舉並說明
1. header
表示文件的第一行時候包含了變量名的邏輯型變量
2. sep
分開數據值的分隔符,默認是 sep="" 表示了一個或多個空格、制表符、換行、或回車,當然也有 sep="\t",使用制表符來分割行內數據
3. row.names
用於指定一個或多個行標記符,將其作為實例標識符,以區分行內數據是不同的個體
4. col.names
如果第一行不包含變量,可以用它指定一個包含變量名的字符向量,即給每一列添加變量名,如果它們都被省略的,R 自動給他們命名 V1、V2...
5. na.strings
用於表示缺失值的字符向量,特點將某些值轉換成 NA
6. colClasses
可選的,將每一列的變量分配為特定的類別,比如 colClasses = c("numeric", "numeric", "character"), 如果數據多於三列,則 colClasses 的值會循環
7. quote
對有特殊字符的字符串划定界限的字符串
8. skip
需要跳過的行的數目
9. stringsAsFactors
標記處字符向量是否轉化為因子,默認為 TRUE,可以被 colClasses 覆蓋,處理大型數據時,將之設置為 FALSE 可以提升速度
10. text
指定文字設置處理的字符串
四、數據集的標注
對於變量,我們希望能有個更詳細的標注去描述它。一種解決辦法是,將變量標簽作為變量名,然后通過位置下標來訪問
names(patientdata)[2] <- "Age at hospitalization(in years)"
patientdata[2]
值標簽
factor()
函數可以為類別型變量創建值標簽
levels 為變量的實際值,而 labels 表示包含了理想值標簽的字符型變量