標籤:

《R語言實戰》學習筆記之數據結構

在06.28寫下了自己在知乎上的第一篇分享後,收到一些小夥伴的點贊和猴子哥的鼓勵,非常開心,在這裡先感謝一下大家,既然制定了學習計劃,就得了倒逼自己輸出,變成一種剛需。

R數據結構 VS C語言結構

在百度和Google上,搜到最多的關於R語言的比較文章是有關R語言與Python語言,但是對於像我這樣剛入門的菜鳥來說,將R語言和自己已認知的概念關聯起來,不失為一種好的學習方法。

R擁有許多用於存儲數據的對象類型,包括標量、向量、矩陣、數組、數據框和列表。它們在存儲數據的類型、創建方式、結構複雜度,以及用於定位和訪問其中個別元素的標記等方面均有所不同,如Fig1所示。

Fig 1

  • 向量 Vector

向量是用於存儲數值型、字元型或邏輯型數據的一維數組,跟C語言中的數組相似,但在向量結構中,元素的排列是從標號1開始的,而C語言是從開始0開始,這是區別;標量是只含一個元素的向量。

# Creating vectorsna <- c(1, 2, 5, 3, 6, -2, 4)nb <- c("one", "two", "three")nc <- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE)nmode(a)n[1] "numeric"nmode(b)n[1] "character"nmode(c)n[1] "logical"n

  • 矩陣 Matrix 和 數組 Array

矩陣和數組可以看成二維向量和三維向量,對應著C語言中的二維數組和三維數組,裡面元素的類型也可分為:存儲數值型、字元型或邏輯型數據。

矩陣:

# Creating Matricesny <- matrix(1:20, nrow=5, ncol=4)nyn [,1] [,2] [,3] [,4]n[1,] 1 6 11 16n[2,] 2 7 12 17n[3,] 3 8 13 18n[4,] 4 9 14 19n[5,] 5 10 15 20ncells <- c(1,26,24,68)nrnames <- c("R1", "R2")ncnames <- c("C1", "C2") nmymatrix <- matrix(cells, nrow=2, ncol=2, byrow=TRUE,n dimnames=list(rnames, cnames)) nmymatrixn C1 C2nR1 1 26nR2 24 68nmymatrix <- matrix(cells, nrow=2, ncol=2, byrow=FALSE,n dimnames=list(rnames, cnames))nmymatrixn C1 C2nR1 1 24nR2 26 68n

數組:

dim1 <- c("A1", "A2")ndim2 <- c("B1", "B2", "B3")ndim3 <- c("C1", "C2", "C3", "C4")nz <- array(1:24, c(2,3,4), dimnames=list(dim1, dim2, dim3))nzn, , C1nn B1 B2 B3nA1 1 3 5nA2 2 4 6nn, , C2nn B1 B2 B3nA1 7 9 11nA2 8 10 12nn, , C3nn B1 B2 B3nA1 13 15 17nA2 14 16 18nn, , C4nn B1 B2 B3nA1 19 21 23nA2 20 22 24n

  • 數據框

數據集通常是數據構成的一個矩形數組,行表示觀測,列表示變數,是最常見數據分析對象,可由數據框創建,其也可看成由多個一維度的向量按照列填充的方式的集合.

# creating a dataframenpatientID <- c(1, 2, 3, 4)nage <- c(25, 34, 28, 52)ndiabetes <- c("Type1", "Type2", "Type1", "Type1")nstatus <- c("Poor", "Improved", "Excellent", "Poor")npatientdata <- data.frame(patientID, age, diabetes, status)npatientdatan patientID age diabetes statusn1 1 25 Type1 Poorn2 2 34 Type2 Improvedn3 3 28 Type1 Excellentn4 4 52 Type1 Poornn# Specifying elements of a dataframenpatientdata[1:2]n patientID agen1 1 25n2 2 34n3 3 28n4 4 52npatientdata[c("diabetes","status")]n diabetes statusn1 Type1 Poorn2 Type2 Improvedn3 Type1 Excellentn4 Type1 Poornpatientdata$agen[1] 25 34 28 52 n

patientdata$age中的$符類似於C語言中「.」或者「->」,用於選擇結構體內的各個成員,但是在每個變數名前都鍵入一次patientdata$可能會讓人發瘋的,所以R語言提供了attach()、detach()、with()三個函數,會幫我們走一些捷徑,用法可以參考下面這篇分享

R語言-attach、detach、with - hongweigg的專欄 - 博客頻道 - CSDN.NET

  • 列表 List

列表是R的數據類型中最為複雜的一種,是一些對象(或成分,component)的有序集合,裡面可以包括向量、矩陣、數組、數據框,列表,對應著C語言中的結構體 Struct,一句話形容:包羅萬象。

# Listing 2.7 - Creating a listng <- "My First List"nh <- c(25, 26, 18, 39)nj <- matrix(1:10, nrow=5)nk <- c("one", "two", "three")nmylist <- list(title=g, ages=h, j, k)n$titlen[1] "My First List"nn$agesn[1] 25 26 18 39nn[[3]]n [,1] [,2]n[1,] 1 6n[2,] 2 7n[3,] 3 8n[4,] 4 9n[5,] 5 10nn[[4]]n[1] "one" "two" "three"n

參考書籍:《R語言實戰》(第2版)

推薦閱讀:

R語言可視化——圖表美化與套用主題(下)
國外最全的圖表參考手冊
Learn R | 時間序列圖表的可視化
Learn R | 數據重塑之tidyr包
R語言顏色綜合運用與色彩方案共享

TAG:R编程语言 |