二、数据集与数据类型【R与统计】
引言
按照要求格式來創建含有研究信息的數據集是任何數據分析的第一步。在R中,這個任務包括以下兩步:
?選擇一種數據結構來存儲數據;
?將數據輸入或導入到該數據結構中
因此,本文將先敘述了R中用于存儲數據的多種結構,具體為向量、因子、矩陣、數據框以及列表的用法。熟悉這些數據結構和訪問其中元素的表述方法將十分有助于了解R的工作方式,便于后續的編程。
我將在下一篇博客介紹一些在R中導入數據的可行方法。手工輸入數據當然可以,除此之外,我們也可以從外部源導入數據。數據源可以是文本文件、電子表格、統計軟件和各類數據庫管理系統。就我自己的日常使用來說,我更傾向于直接利用文本文件導入數據,雖然這樣有些粗暴,但就小規模數據,可以說十分簡單快捷了。
文章主要參考了《R語言實戰.第2版》、B站系列課程《R語言入門與數據分析》 并結合自己的經驗總結而成。
注:強烈推薦想要系統性學習R的朋友購買《R語言實戰》,這本書可以說是很經典了
數據集的概念
在數據分析中,數據集通常是由數據構成的一個矩形數組,行表示觀測,列表示變量。下面提供了一個美國犯罪相關統計的數據集(state.x77)
由圖我們可以清楚地看到此數據集的結構, Alabama、Alaska等是行/實例標識符,Population、Income等為相關變量。
R中有許多用于儲存數據的結構,包括標量、向量、數組、數據框和列表。圖中所示實際上對應著R中的矩陣。多樣化的數據結構賦予了R及其靈活的數據處理能力。
同時,R可以處理的數據類型(模式)包括數值型、字符型、邏輯型(TRUE/FALSE)、復數型(虛數)和原生型(字節)。而在分組分析中很實用的就是對因子(factors)的應用,這個也將在本文后半截提到。
數據結構
在上面我們提到R擁有許多用于儲存數據的對象類型,它們在存儲數據的類型、創建方式、結構復雜度,以及用于定位和訪問其中個別元素的標記等方面均有所不同。這里借用《R語言實戰.第二版》中的示意圖:
下面,就讓我們從向量開始,逐個探究每一個數據結構。
黑底部分代碼為最基礎用法,其他為相關補充,可根據目錄選擇性查看
1 向量
向量是用于存儲數值型、字符型或邏輯型數據的一維數據。執行組合功能的函數c()可用來創建向量。示例如下:
> a <- c(3, 1, 4, 0, 7, 9) > b <- c("h", "e", "y") > c <- c(TRUE, FALSE, TRUE , FALSE)這里,a為數值型向量,b是字符型向量,而c是邏輯型向量。
- 單個向量中的數據必須擁有相同的類型或模式,同一向量中無法混雜不同模式的數據。
- 標量是只含一個元素的向量(如:f <- 520)
- 注意區分大小寫,使用小寫c()來創建向量
- 在R中注釋符為"#"
通過在方括號中給定元素所處位置的數值即可訪問向量中的元素。例如:
基本用法:
>a [1] 3 1 4 0 7 9 > a[4:6] #使用冒號用于生成數值序列(第4個到第6個) [1] 0 7 9 > a[-1] #去掉第一個元素后的結果,并不改變原數據 [1] 1 4 0 7 9 > a[1] [1] 3 #與python不同,R的索引是從1開始的實用命令補充(非必須):
關于運算
2 矩陣
矩陣是一個二維數組,只是每個元素擁有相同的模式。可通過函數matrix()創建矩陣
myymatrix <- matrix(data, nrow=number_of_rows, ncol=number_of_columns,
byrow=logical_value, dimnames=list(
char_vector_rownames, char_vector_colnames))
注:
data-矩陣中的所有元素
nrow\ncol-指定行\列的維數
dimnames-可選、以字符型向量表示的行名和列名
byrow-矩陣按行填充(byrow=TRUE)還是按列填充(byrow=FALSE),默認為按列填充
創建矩陣
>y <- matrix(1:20, nrow = 4, ncol = 5) #創建一個4*5的矩陣 > y[,1] [,2] [,3] [,4] [,5] [1,] 1 5 9 13 17 [2,] 2 6 10 14 18 [3,] 3 7 11 15 19 [4,] 4 8 12 16 20 >data <- c(101, 202, 303, 404) > rnames <- c("R1","R2") #行命名 > cnames <- c("C1","C2") #列命名> mymatrix <- matrix(data, nrow = 2, ncol=2, byrow = TRUE, dimnames = list(rnames, cnames)) #按行填充 > mymatrixC1 C2 R1 101 202 R2 303 404>mymatrix <- matrix(data, nrow = 2, ncol=2, byrow = FALSE, dimnames = list(rnames, cnames)) #按列填充 > mymatrixC1 C2 R1 101 303 R2 202 404矩陣下標的使用 #這部分與python十分相似 > x <- matrix(1:9, 3, 3, byrow = TRUE) > x[,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9 > x[2,] #第二行 [1] 4 5 6 > x[,2] #第二列 [1] 2 5 8 > x[1, c(1,3)] #第一行的第一列與第一行的第三列 [1] 1 3矩陣都是二維的,和向量類似,僅能包含一種數據類型。但維度超過2維時,不妨試用數組。當有多種模式的數據時,即可使用數據框。
3 數組
數組(array)與矩陣類似,但維度可大于2數組可通過array函數創建,形式如下:
myarray <- array(data, dimensions, dimnames)
注:
data-數組中的數據
dimensions-數值型向量,給出每個維度下標的最大值
dimnames-可選的、各維度名稱標簽的列表
示例:
> dim1 <- c("A1", "A2") > dim2 <- c("B1", "B2", "B3") > dim3 <- c("C1", "C2", "C3", "C4") > z <- array(1:24, c(2, 3, 4), dimnames=list(dim1, dim2, dim3)) #4個2行3列的矩陣,個人認為也可理解成數據立方體 > z , , C1B1 B2 B3 A1 1 3 5 A2 2 4 6, , C2B1 B2 B3 A1 7 9 11 A2 8 10 12, , C3B1 B2 B3 A1 13 15 17 A2 14 16 18, , C4B1 B2 B3 A1 19 21 23 A2 20 22 244 數據框
與矩陣不同,數據框不同的列可以包含不同模式的數據,它與我們通常在SAS、SPSS和Stata中看到的數據集類似,是在R中最常處理的數據結構。
數據框可通過data.frame()創建:
mydata <- data.frame(col1, col2, col3,…)
其中的列向量col1、col2、col3等可以是任何類型(如字符型、數值型或邏輯型)。每一列的名稱可由函數names指定。
示例
ID <- c(1, 2, 3, 4) > age <- c(17, 34, 28, 35) > diabetes <- c('type1', "type2", "type1", "type1") > status <- c("poor", "improves", "excellent", "poor") > patientdata <- data.frame(ID, age, diabetes, status)> patientdata ID age diabetes status 1 1 17 type1 poor 2 2 34 type2 improves 3 3 28 type1 excellent 4 4 35 type1 poor數據框每一列數據的模式必須唯一,每一行可以不同,可以理解為比較規則的矩陣。
元素選取
patientdata[1:2] #選取前兩列 ID age 1 1 17 2 2 34 3 3 28 4 4 35> patientdata[c("ID", "status")] #選取特定列 ID status 1 1 poor 2 2 improves 3 3 excellent 4 4 poor > patientdata$status #利用美元符獲取特定變量信息 [1] "poor" "improves" "excellent" "poor"當需要多次訪問數據集的變量數據,頻繁使用美元符可能讓人生厭,故可以聯合使用函數attach()和detach來簡化代碼。
?attach()和detach()
函數attach可將數據框添加到R的搜索路徑中,在遇到變量名后,將檢查搜索路徑中的數據框。而detach則是其反向操作,將數據框從搜索路徑中移除,但并不會對數據框本身做任何處理。
以上代碼也可寫成:
attach(mtcars) summary(mpg) plot(mpg, disp) plot(mpg, wt) detach(mtcars)- 最好在分析一個單獨的數據框,并且不太可能有多個同名對象時使用上面兩個函數。
- 同時,因為R嚴格區分大小寫,在定義變量名時盡量避免與R內置函數或數據集名稱相撞,這樣不易混淆。
- 鏈接后直接訪問,用完一定要記得取消鏈接
5 因子
變量可歸結為名義型、有序型或連續型變量。
名義型變量是沒有順序之分的類型變量;
有序型變量表示一種順序關系,而非數量關系(比如職稱,我們知道其相對高低,卻不能量化某兩個職稱間究竟差多少);
連續型變量可以呈現為某個范圍內的任意值,并同時表示了順序和數量(比如年齡)。
因子主用于分類與頻數分析,類型為名義變量和次序變量。
函數factor()以一個整數向量的形式儲存類別值,下面我們將通過示例來更直觀了解因子的作用:
(factor主用于分組分析或繪圖)
6 列表
列表是R數據類型中最復雜的一種,因為它就像混合飲料一樣,允許整合若干(可能無關的)對象到單個對象名下。例如,某個列表可能是若干向量、矩陣、數據框,甚至其他列表的組合。可以使用函數list()創建列表:
mylist <- list(object1, object2, …)
示例:
缺失數據
字符串
日期與時間
> ?ts > sales <- round(runif(48,min=50,max=100)) > sales[1] 78 62 81 90 62 97 69 76 63 82 50 71 96 94 71 79 86 70 71 55 73 95 70 77 87 56 59 75 70 74 57 84 97 80 76 97 53 75 68 96 80 66 86 51 [45] 55 63 51 66> a <- ts(sales,start = 2010,end = 2014,frequency = 1)#按年 > a Time Series: Start = 2010 End = 2014 Frequency = 1 [1] 78 62 81 90 62> ts(sales,start = c(2010,5),end = c(2014,4),frequency = 4)#按季度Qtr1 Qtr2 Qtr3 Qtr4 2011 78 62 81 90 2012 62 97 69 76 2013 63 82 50 71 2014 96 94 71 79 > ts(sales,start = c(2010,5),end = c(2014,4),frequency = 12)#按月Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2010 78 62 81 90 62 97 69 76 2011 63 82 50 71 96 94 71 79 86 70 71 55 2012 73 95 70 77 87 56 59 75 70 74 57 84 2013 97 80 76 97 53 75 68 96 80 66 86 51 2014 55 63 51 66總結
以上是生活随笔為你收集整理的二、数据集与数据类型【R与统计】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下xz文件如何解压,tar.x
- 下一篇: 硬件设计【1】——光耦的基本原理及TLP