R語言從入門到精通之二數據集創建

一、數據集通常是由數據構成的一個矩形數組,行表示觀測,列表示變數。在R中,創建數據集包括以下兩步:①選擇一種數據結構來存儲數據;②將數據輸入或導入到這個數據結構中。R中有許多用於存儲數據的結構,包括標量、向量、數組、數據框和列表。

R可以處理的數據類型(模式)包括數值型、字元型、邏輯型(TRUE/FALSE)、複數型(虛數)和原生型(位元組)。

R中的數據結構

二、向量

向量是用於存儲數值型、字元型或邏輯型數據的一維數組。執行組合功能的函數c()可用來

創建向量。注意:向量中各元素的格式必須一致。

> a <- c(2, 3, 4, 3, 6, -2, 4)> b <- c("A", "B", "C")> c <- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE)

注意一下向量,R將向量d中的元素都認為是字元型。

> d <- c(1,2,"S",TRUE)> d[1] "1" "2" "S" "TRUE"

取向量中的元素:

> a[3] #取a向量中第三個元素[1] 5> a[(2:4)] #取a向量中第二到第四個元素[1] 2 5 3> a[c(1,3,5)] #取a向量中第一、三、五個元素[1] 1 5 6

常用向量生成規則:

> c(2:9) #生成2到9的連續數列,步長是1[1] 2 3 4 5 6 7 8 9> rep(2,4) #重複生成4個2;[1] 2 2 2 2> seq(2,10,3) # 生成以2為起點,步長為3,不超過10的數據[1] 2 5 8> seq(2,10,5) # 生成以2為起點,步長為5,不超過10的數據[1] 2 7

三、矩陣

矩陣是一個二維數組,只是每個元素都擁有相同的模式(數值型、字元型或邏輯型)。可通

過函數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),默認情況下按列填充。

> matrix(1:24,nrow = 4,ncol = 6,byrow = TRUE) #生成4行6列並且按行填充的矩陣 [,1] [,2] [,3] [,4] [,5] [,6][1,] 1 2 3 4 5 6[2,] 7 8 9 10 11 12[3,] 13 14 15 16 17 18[4,] 19 20 21 22 23 24> cells <- c(1,2,3,4)> rnames <- c("R1","R2")> cnames <- c("C1","C2")> matrix(cells, nrow = 2, ncol = 2,byrow = TRUE, dimnames = list(rnames,cnames)) C1 C2R1 1 2R2 3 4

取矩陣元素

> x <- matrix(1:24,nrow = 4,ncol = 6,byrow = TRUE) #生成4行6列並且按行填充的矩陣x [,1] [,2] [,3] [,4] [,5] [,6][1,] 1 2 3 4 5 6[2,] 7 8 9 10 11 12[3,] 13 14 15 16 17 18[4,] 19 20 21 22 23 24> x[2,] #取矩陣x的第二行[1] 7 8 9 10 11 12> x[,2] #取矩陣x的第二列[1] 2 8 14 20> x[1,3] #取矩陣x的第1行、第3列的元素[1] 3> x[2,c(2,3)] #取矩陣x的第2行、第2、3列的元素[1] 8 9矩陣都是二維的,和向量類似,矩陣中也僅能包含一種數據類型。當維度超過2時,不妨使用數組;當有多種模式的數據時,可以使用數據框。

四、數組

數組(array)與矩陣類似,但是維度可以大於2。數組可通過array函數創建,形式如下:

myarray <- array(vector, dimensions, dimnames)

其中vector包含了數組中的數據,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)) #創建三維(2×3×4)數值型數組的示例。> z, , C1 B1 B2 B3A1 1 3 5A2 2 4 6, , C2 B1 B2 B3A1 7 9 11A2 8 10 12, , C3 B1 B2 B3A1 13 15 17A2 14 16 18, , C4 B1 B2 B3A1 19 21 23A2 20 22 24> z[2,3,1] #取第一維度、[1] 6

數組的取值,同向量,不在闡述。

五:數據框

由於不同的列可以包含不同模式(數值型、字元型等)的數據,數據框的概念較矩陣來說更

為一般。它與你通常在SAS、SPSS和Stata中看到的數據集類似。數據框將是你在R中最常處理的數據結構。

由於數據有多種模式,無法將此數據集放入一個矩陣。在這種情況下,使用數據框是最佳選擇。數據框可通過函數data.frame()創建:

mydata <- data.frame(col1, col2, col3,...)

其中的列向量col1、col2、col3等可為任何類型(如字元型、數值型或邏輯型)。每一列的名

稱可由函數names指定。

> patientID <- c(1, 2, 3, 4)> age <- c(25, 34, 28, 52)> diabetes <- c("Type1", "Type2", "Type1", "Type1")> status <- c("Poor", "Improved", "Excellent", "Poor")> patientdata <- data.frame(patientID, age, diabetes, status)> patientdatapatientID age diabetes status1 1 25 Type1 Poor2 2 34 Type2 Improved3 3 28 Type1 Excellent4 4 52 Type1 Poor

取數據框數據

patientdata[1:2] #取數據框第一、二列數據patientID age1 1 252 2 343 3 28patientdata[c("diabetes", "status")] #取數據框中變數diabetes、status的數據diabetes status1 Type1 Poor2 Type2 Improved3 Type1 Excellent4 Type1 Poor> patientdata$age #取數據框中名稱為age變數的數據[1] 25 34 28 52

幾種方便的取數據框中數據的方法

函數attach()可將數據框添加到R的搜索路徑中,函數detach()將數據框從搜索路徑中移除。

> attach(patientdata)The following objects are masked _by_ .GlobalEnv: #提示「age, diabetes, patientID, status」這些變數名稱已經在masked _by_ .GlobalEnv中標識 age, diabetes, patientID, status> status [1] "Poor" "Improved" "Excellent" "Poor" > detach(patientdata)

以上代碼等同於

patientdata$status

或者

with(patientdata, {status})

對數據框中每一個對象進行命名

patientdata <- data.frame(patientID, age, diabetes,status, row.names=patientID)

將patientID指定為R中標記各類列印輸出和圖形中實例名稱所用的變數。

六、因子

變數可歸結為名義型、有序型或連續型變數。類別(名義型)變數和有序類別(有序型)變數在R中稱為因子(factor)

名義型變數是變數無順序關係或者邏輯關係,如糖尿病的類型:Type1、Type2;

有序型變數是表示一種順序關係,而非數量關係,如糖尿病的病情嚴重程度:Status(poor、improved、excellent),是從一個狀態遞進到另外一個狀態;

連續型變數是呈現為某個範圍內的任意值,並同時表示了順序和數量。年齡Age就是一個連續

型變數,它能夠表示像14.5或22.8這樣的值以及其間的其他任意值。

status <- factor(status) #將status轉化為因子變數,並且按著因子中元素首字母進行排序status <- factor(status, order=TRUE,levels=c("Poor", "Improved", "Excellent"))

以上代碼標識將status轉化為因子變數,並且按著「Poor", "Improved", "Excellent"的順序進行排序,即Poor標識為1、Improved被標識為2、Excellent被標識為3

七、列表

列表(list)是R的數據類型中最為複雜的一種。一般來說,列表就是一些對象(或成分,

component)的有序集合。列表允許你整合若干(可能無關的)對象到單個對象名下。

某個列表中可能是若干向量、矩陣、數據框,甚至其他列表的組合。可以使用函數list()創

建列表:

mylist <- list(object1, object2, ...)

其中的對象可以是目前為止講到的任何結構。你還可以為列表中的對象命名:

mylist <- list(name1=object1, name2=object2, ...)

至此,R語言中數據類型基本概述完,下一章將討論數據的導入和導出。


推薦閱讀:

TAG:大數據分析 | R語言實戰書籍 |