【R語言基礎】02. 基本數據結構

一、基本數據類型

包括數值型(numeric)、邏輯型(logical)、字元型(character)、缺失值(NA)、浮點型(double)、複數型(complex)、整數型(integer)等。

數據類型的判別與轉換都是統一的格式,例如,is.numeric()判斷是否為數值型,as.numeric()轉換為數值型。

查看對象的類型,用函數class()/typeof()/mode(),基本格式相同:

class(x)

其中,x為要查看的對象。

:在展現數據的細節上,mode()<class()<typeof();str(x)顯示對象x的結構

二、數據結構

1. 向量

向量是R語言中最基本的數據類型,是以一維數組管理數據的一種對象類型,可以是數值型、字元型、邏輯值型、複數型。

注意:同一向量不能混雜多種不同類型的數據。

(1) n創建向量

通過函數c()實現組合功能,例如

x1<-c(2,3,5,7,10)nx1n[1] 2 3 5 7 10nx2<-c("a","b","c")nx2n[1] "a" "b" "c"n

(2) 向量索引

下標索引:(R語言中下標是從1開始的),例如

x[1]——返回x的第1個元素

x[-1]——返回除第一個元素之外的所有元素

x[2:4]——返回x的第2至4個元素

x[-(2:4)]——返回x的除第2至4元素之外的所有元素(刪除元素)

名稱索引:先給向量中的每個元素命名,再通過名稱訪問對應的元素。

which元素位置:通過函數which()返回邏輯向量中為TRUE的位置(下標);which.max(x), which.min(x)返迴向量x中最大值、最小值所在的位置。

x1[which(x1>3 & x1<8)] #返回滿足條件的元素n

subset生成子集:檢索向量中滿足條件的元素,提取出來:

subset(x1,x1>3 & x1<8) #結果同上n

match匹配:match(x1,x2) 逐個檢查向量x1中元素是否在向量x2中,若是則返回該元素,否則返回NA。

%in%檢查是否屬於:x1 %in% x2 逐個判斷向量x1中元素是否屬於向量x2。

(3)向量的編輯

對已創建向量進行增加或刪除元素。

x<-c(x1,c(6,7,8)) #增加一個向量n

x[10]=10 #增加第10個元素,前面空位置用NA補齊n

x<-x[-c(3,5)] #刪除第3和第5個元素

(4)創建等差序列

函數seq(),基本格式為:

seq(from=1,to=...,by=...,length.out=...,along.withn=...)

其中,from, to設置首項、尾項;

by設置等差值(默認為1或-1);

length.out設置序列長度;

along.with以該參數的長度作為序列長度。

(5)創建重複序列

函數rep(),基本格式為:

rep(x,times=...,each=1,length.out=...)

其中,x為要重複的序列;

times設置序列重複次數;

each設置每個元素分別重複的次數;

length.out設置產生的序列的長度;

2. 矩陣

矩陣是二維數組,可以描述二維數據,也要求矩陣內各元素有相同的類型。

(1)創建矩陣

函數matrix(),基本格式為:

matrix(x, nrow=..., ncol=..., byrow=FALSE,ndimnames=...)

其中,x為數據向量作為矩陣的元素;

nrow設定行數;

ncol設定列數;

byrow設置是否按行填充,默認為FALSE按列填充;

dimnames用字元型向量表示矩陣的行名和列名。

(2)矩陣索引

a[i,j]——返回矩陣a的第i行,第j列的元素n

c["r2","c1"]——返回矩陣c的名稱為「r2」的行,「c1」的列對應的元素n

a[i,]——返回矩陣a的第i行n

a[,j]——返回矩陣a的第j列n

a[c(i:j),]——返回矩陣a的第i至第j行

dim(x)——返回矩陣x的維數(幾行×幾列)

(3)矩陣的編輯

函數rbind(A,B), 縱向合併(增加行),要求列數相同;

函數cbind(C,D), 橫向合併(增加列),要求行數相同。

注意:rbind(A,1)相當於給矩陣A增加一行「1」。

a[-1,]——刪除矩陣a的第1行

a[,-1]——刪除矩陣a的第1列

a[-c(2:4),]——刪除矩陣a的第2至4行

(4) 矩陣簡單操作

nrow(A),ncol(A)——矩陣A的行數、列數;

dim(A)——矩陣A的維數;

rowSums(A), rowMeans(A), colSums(A), colMeans(A)——按行按列求和、求均值;

t(A)——A轉置

3. 數據框(數據表)

R語言中做統計分析的樣本數據,都是按數據框類型操作的。數據框的每一列代表一個變數屬性的所有取值,每一行代表一條樣本數據。

(1) 創建數據框

通過函數data.frame()把多個向量組合起來創建,並設置列名稱。其基本格式為:

data.frame(col1=,col2=,col3=,...)

其中,col1, col2, col3, …為列名,其賦值向量可以為任意類型。

nnnnnnnnnnnn註:矩陣也可以通過函數data.frame()轉化為資料庫。

iris<-data.frame(Sepal.Length=c(5.1,4.9,4.7,4.6), nSepal.Width=c(3.5,3.0,3.2,3.1), nPetal.Length=c(1.4,1.4,1.3,1.5), nPetal.Width=rep(0.2,4))nirisn Sepal.Length Sepal.Width Petal.Length Petal.Widthn1 5.1 3.5 1.4 0.2n2 4.9 3.0 1.4 0.2n3 4.7 3.2 1.3 0.2n4 4.6 3.1 1.5 0.2n

(2) 數據框索引

列標或列名稱索引

iris[,1], iris$Sepal.Length, iris["Sepal.Length"]

——都是返回數據框iris的第1列;n

行索引

iris[1,]——返回數據框iris的第1行

iris[1:3,]——返回數據框iris的第1至3行

元素索引

iris[1,1]或iris$Sepal.Length[1]n或iris["Sepal.Length"][1]

——都是返回數據框iris的第1列第1個數據

用函數subset()按條件索引:subset(data_iris,Sepal.Length<5)

(3) 數據框的編輯

類似矩陣操作,可通過函數rbind(),增加行(樣本數據),要求寬度(列數)相同;函數cbind(),增加列(變數),要求高度(行數)相同。

刪除樣本(行),類似矩陣操作。

用函數names()查看或修改數據框的列名。

4. 因子

變數分為名義型(無順序好壞之分的分類變數,如性別)、有序型(有順序好壞之分的分類變數,如療效)、連續型(通常的數值變數,可帶小數位)。

名義型和有序型的類別變數,在R語言中稱為因子。

因子提供了一個簡單且緊湊的形式來處理分類數據,因子用水平來表示所有可能的取值,例如,性別有兩個水平:男、女。

(1) 創建因子

使用函數factor(),基本格式為:

factor(x, levels, labels=..., exclude=...,

ordered=TRUE, nmax=...)

其中,x為創建因子的數據向量;

levels指定因子的水平數,默認為x中不重複的所有值;

labels設置各水平名稱(前綴),與水平一一對應;

exclude指定有哪些水平是不需要的;

ordered設置是否對因子水平排序,默認為TRUE有序因子;

nmax設定水平數的上限。

ff<-factor(substring("statistics",1:10,1:10),levels=letters) nffn [1] s t a t i s t i c snLevels: a b c d e f g h i j k l m n o p q r s t u v w x y znff[,drop=TRUE] #去掉未包含在向量中的水平,同f.<-factor(ff)n [1] s t a t i s t i c snLevels: a c i s tnfactor(1:5,labels="let")n [1] let1 let2 let3 let4 let5nLevels: let1 let2 let3 let4 let5nfactor(LETTERS[3:1],ordered = TRUE)n[1] C B AnLevels: A < B < Cn

:函數substring()用來提取字元串的子串,第2個參數是起始位置,第3個參數是終止位置;letters和LETTERS是R中專有變數,表示26個小寫/大寫字母組成的字元向量。

也可以用函數gl()生成不同水平的因子序列,基本格式為:

gl(n, k, length=, labels=, ordered=FALSE)n

其中,n表示因子水平數;

k表示每個水平的重複數;

length表示生成序列的長度,默認n×k;

labels為表示因子水平的向量,默認1:n;

ordered指定是否為有序因子,默認FALSE無序因子。

gl(3,2,ordered = TRUE) #生成水平數為3,每個水平重複2次的有序因子序列n[1] 1 1 2 2 3 3nLevels: 1 < 2 < 3n

註:R語言中,因子是以整數型向量存儲的,每個因子水平對應一個整數型的數。對字元型向量創建的因子,會按照字母順序排序,再對應到整數型向量。

5. 列表

列表就是一些對象或成分的有序集合(組合方式更自由)。列表允許整合若干對象到單個對象名下,例如,某個列表可能是若干向量、矩陣、數據框,甚至是其它列表的組合。

列表常用來存儲較複雜的數據對象。列表提供了一種簡單的方式來組織和訪用不相干的對象。另外,R語言中許多函數的運行結果都是用列表形式返回的。

(1) 創建列表

用函數list(),基本格式為:

list(name1=object1,name2=object2,...)

其中,object對象可以是任何類型。

data<-list(a=c(1,2,3,4),b=c("one","two","three"),c=c(TRUE,FALSE),d=(1+2i))ndatan$an[1] 1 2 3 4n$bn[1] "one" "two" "three"n$cn[1] TRUE FALSEn$dn[1] 1+2in

(2) 列表索引

與數據框操作類似,但是用雙重方括弧。

data[[1]]或data[["a"]]——返回列表data的第1列

data$a——返回列表data的名稱為a的列

data[[1]][1]——返回列表data的第1列的第1個元素

(3) 列表的編輯

與向量的編輯類似,使用函數c()進行合併。

主要參考文獻

  1. 張良均,謝佳標,楊坦,肖剛. R語言與數據挖掘. 機械工業出版社,2016.

作者:張敬信

著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。


推薦閱讀:

翻譯:用R語言進行數據清洗
如何在Quora上獲得更多的贊——來自10393個回答的實證
R語言可視化——圖表美化與套用主題(上)
[譯]快速上手:在R中使用XGBoost演算法

TAG:R编程语言 | 数据结构 |