《R語言實戰》第1,2章 筆記

第1章:

1、R語言的特性:

  • 免費
  • 適合多種類型數據分析
  • 可製圖,數據可視化
  • 可交互
  • 匹配各種類型數據源
  • 易擴展
  • 擁有各種GUI,支持多平台

2、一個R會話示例:

age <- c(1,3,5,2,11,9,3,9,12,3)nweight <- c(4.4,5.3,7.2,5.2,8.5,7.3,6.0,10.4,10.2,6.1)n#平均值nmean(weight)n#標準差(反映數據離散程度)nsd(weight)n#相關度ncor(age,weight)n#繪圖nplot(age,weight)nq()n

3、工作空間:

用戶定義的對象都會保存在工作空間(workspace)里,作為一個鏡像,下次啟動R會自動載入。可以用getwd()和setwd("mydirectory")查看和設置工作目錄,不在工作目錄的文件,調用時需要寫絕對路徑。

用於管理R工作空間的函數:

4、幫助文檔:

help.start()n

5、包:

#包的安裝ninstall.packages("vcd")nn#包的更新nupdate.packages()nn#查看已安裝包的信息ninstalled.packages()nn#包的載入nlibrary(vcd) n

總結:這一章主要熟悉了R語言的開發環境RStudio,細節知識點並沒有完全羅列出,目的是希望筆記能有儘可能少的信息量,抓住核心知識點,之後學習如果又發現這章的重點,會補充進去,迭代學習。

第2章:

1、按照個人要求的格式來創建含有研究信息的數據集,這是任何數據分析的第一步:(分以下兩步)

  • 選擇一種數據結構來存儲數據

  • 將數據輸入或導入到這個數據結構中

2、數據集:

數據集通常是由數據構成的一個矩形數組,行表示觀測,列表示變數。(不同的行業對於數據集的行和列叫法不同。統計學家稱它們為觀測(observation)和變數(variable),資料庫分析師則稱其為記錄(record)和欄位(field),數據挖掘/機器學習學科的研究者則把它們叫做示例(example)和屬性(attribute)。

3、數據類型:

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

4 、數據結構:

R擁有許多用於存儲數據的對象類型,包括標量、向量、矩陣、數組、數據框和列表

  • 向量:向量是用於存儲數值型、字元型或邏輯型數據的一維數組。
  • a <- c(1,2,5,3,6,-2,4)nb <- c("one","two","three")nc <- c(TRUE,TRUE,TRUE,FALSE,TRUE,FALSE)n

    同一向量中無法混雜不同模式的數據。

a[c(2, 4)]用於訪問向量a中的第二個和第四個元素,a <- c(2:6)等價於a <- c(2,3, 4, 5, 6)。

  • 矩陣:

矩陣是一個二維數組,只是每個元素都擁有相同的模式(數值型、字元型或邏輯型)。可通過函數matrix創建矩陣。一般使用格式為:

其中vector包含了矩陣的元素,nrow和ncol用以指定行和列的維數,dimnames包含了可選的、以字元型向量表示的行名和列名。選項byrow則表明矩陣應當按行填充(byrow=TRUE)還是按列填充(byrow=FALSE),默認情況下按列填充。

創建矩陣:

> y <- matrix(1:20,nrow=5,ncol=4)n> yn [,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 20n> cells <- c(1,26,24,68)n> rnames <- c("R1","R2")n> cnames <- c("C1","C2")n> mymatrix <-matrix(cells,nrow=2,ncol=2,byrow=TRUE,dimnames=list(rnames,cnames))n> mymatrixn C1 C2nR1 1 26nR2 24 68n

下標使用:

> x <- matrix(1:10,nrow=2)n> xn [,1] [,2] [,3] [,4] [,5]n[1,] 1 3 5 7 9n[2,] 2 4 6 8 10n> x[2,]n[1] 2 4 6 8 10n> x[,2]n[1] 3 4n> x[1,4]n[1] 7n> x[1,c(4,5)]n[1] 7 9n

當維度超過2時,不妨使用數組。當有多種模式的數據時,不妨使用數據框。

  • 數組:

其中vector包含了數組中的數據,dimensions是一個數值型向量,給出了各個維度下標的最大

值,而dimnames是可選的、各維度名稱標籤的列表。

> dim1 <- c("A1","A2")n> dim2 <- c("B1","B2","B3")n> dim3 <- c("C1","C2","C3","C4")n> z <- array(1:24,c(2,3,4),dimnames=list(dim1,dim2,dim3))n> zn, , 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 24nn> n

元素z[1,2,3]為15。

  • 數據框:

> patientID <- c(1,2,3,4)n> age <- c(25,34,28,52)n> diabetes <- c("Type1","Type2","Type1","Type1")n> status <- c("Poor","Improved","Excellent","Poor")n> patientdata <- data.frame(patientID,age,diabetes,status)n> patientdatan patientID age diabetes statusn1 1 25 Type1 Poorn2 2 34 Type2 Improvedn3 3 28 Type1 Excellentn4 4 52 Type1 Poorn> patientdata[1:2]n patientID agen1 1 25n2 2 34n3 3 28n4 4 52n> patientdata[c("diabetes","status")]n diabetes statusn1 Type1 Poorn2 Type2 Improvedn3 Type1 Excellentn4 Type1 Poorn> patientdata$agen[1] 25 34 28 52n> table(patientdata$diabetes,patientdata$status)n n Excellent Improved Poorn Type1 1 0 2n Type2 0 1 0n> n

attach(),detach,with():

> summary(mtcars$mpg)n Min. 1st Qu. Median Mean 3rd Qu. Max. n 10.40 15.42 19.20 20.09 22.80 33.90 n> plot(mtcars$mpg,mtcars$disp)n> plot(mtcars$mpg,mtcars$wt)n

也可以寫成:

> attach(mtcars)n> summary(mpg)n Min. 1st Qu. Median Mean 3rd Qu. Max. n 10.40 15.42 19.20 20.09 22.80 33.90 n> plot(mpg,disp)n> plot(mpg,wt)n> detach(mtcars)n

對象衝突:

> mpg <- c(25,36,47)n> attach(mtcars)nThe following object is masked _by_ .GlobalEnv:nn mpgnn> plot(mpg,wt)nError in xy.coords(x, y, xlabel, ylabel, log) : n x and y lengths differn> mpgn[1] 25 36 47n

使用with():

> with(mtcars,{summary(mpg,disp,wt)n+ plot(mpg,disp)n+ plot(mpg,wt)n+ })n

> with(mtcars,{n+ nokeepstats <- summary(mpg)n+ keepstats <<- summary(mpg)n+ })n> nokeepstatsnError: object nokeepstats not foundn> keepstatsn Min. 1st Qu. Median Mean 3rd Qu. Max. n 10.40 15.42 19.20 20.09 22.80 33.90 n

實例標識符:

  • 因子:

類別(名義型)變數和有序類別(有序型)變數在R中稱為因子(factor)。

> diabetes <- factor(diabetes)n> diabetesn[1] Type1 Type2 Type1 Type1nLevels: Type1 Type2n> status <- factor(status,ordered=TRUE)n> statusn[1] Poor Improved Excellent Poor nLevels: Excellent < Improved < Poorn> status <- factor(status,order=TRUE,levels=c("Poor","Improved","Excellent"))n> statusn[1] Poor Improved Excellent Poor nLevels: Poor < Improved < Excellentn

> patientID <- c(1,2,3,4)n> age <- c(25,34,28,52)n> diabetes <- factor(diabetes)n> status <- c("Poor","Imlproved","Excellent","Poor")n> diabetes <- factor(diabetes)n> status <- factor(status,order=TRUE)n> patientdata <- data.frame(patientID,age,diabetes,status)n> str(patientdata)ndata.frame:t4 obs. of 4 variables:n $ patientID: num 1 2 3 4n $ age : num 25 34 28 52n $ diabetes : Factor w/ 2 levels "Type1","Type2": 1 2 1 1n $ status : Ord.factor w/ 3 levels "Excellent"<"Imlproved"<..: 3 2 1 3n> summary(patientdata)n patientID age diabetesn Min. :1.00 Min. :25.00 Type1:3 n 1st Qu.:1.75 1st Qu.:27.25 Type2:1 n Median :2.50 Median :31.00 n Mean :2.50 Mean :34.75 n 3rd Qu.:3.25 3rd Qu.:38.50 n Max. :4.00 Max. :52.00 n status n Excellent:1 n Imlproved:1 n Poor :2 n

函數str(object)可提供R中某個對象(本例中為數據框)的信息。函數summary()會區別對待各個變數。它顯示了連續型變數age的最小值、最大值、均值和各四分位數,並顯示了類別型變數diabetes和status(各水平)的頻數值。

  • 列表:

> g <- "My First List"n> h <- c(25,26,18,39)n> j <- matrix(1:10,nrow=5)n> k <- c("one","two","three")n> mylist <- list(title=g,ages=h,j,k)n> mylistn$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"nn> mylist[[2]]n[1] 25 26 18 39n> mylist[["ages"]]n[1] 25 26 18 39n

5、輸入:

> mydata <- data.frame(age=numeric(0),gender=character(0),weight=numeric(0))n> mydata <- edit(mydata)n

可修改,輸入值,類型。

再次查看:

> mydata <- edit(mydata)nn#等效:n> fix(mydata)n

(其它輸入方式略)

總結:這一章主要介紹了數據結構,以及數據的輸入輸出,選擇合適的數據結構能讓我們更好地處理數據。多敲代碼,多加練習思考,才能掌握好它們,為之後的學習做好準備。


推薦閱讀:

面對有大量缺失值的數據應該怎樣處理比較合理?
python 可不可以像R那樣保存內存中的變數?
Microsoft R open和Microsoft R server和普通的R語言有什麼區別和聯繫?
怎麼用R語言繪製英文中國地圖,標註英文省名,以及在不同的省份填充指定的顏色?

TAG:R编程语言 | 数据分析 |