《R語言實戰》第四章—數據預處理

《R語言實戰》第四章正式進入了數據分析之預處理,該章講了如何創建變數,怎樣對數據集進行整理,數據類型轉換,數據排序以及觀測和列的提取,數據篩選等。本章知識點小結如下:

1、創建新變數:格式為:變數名 <— 表達式

假設你有一個名為mydata的數據框,其中的變數為x1和x2,現在你想創建一個新變數sumx

存儲以上兩個變數的加和。代碼: sumx <- x1 + x2

但是這是錯誤的,因為R並不知道x1和x2來自於數據框mydata。正確代碼如下:

sumx <- mydata$x1 + mydata$x2

2、R語言裡面的運算符主要有以下:

+ 加

– 減

* 乘

/ 除

^或

** 求冪

x%%y 求余(x mod y)

x%/%y 整數除法。5%/%2 的結果為2

3、變數重新賦值:語句variable[condition] <- expression將僅在condition的值為TRUE時執行賦值;例如將99歲的年齡值重編碼為缺失值:leadership$age[leadership$age == 99] <—NA

4、變數重命名的3種方法:

  • 用fix(數據結構名),調用一個互動式的編輯器。然後你單擊變數名,然後在彈出的對話框中將其重命名。例如修改mydata中age這個變數名:fix(mydata)則調出以下編輯器,點擊age則彈出可以修改的對話框,則可以對變數名進行修改。

  • 通過names()函數來重命名變數,代碼如下:

    names(mydata) 可以顯示這個數據框中包含的變數。

    names(mydata)[2]<-「gender_test」 將第二個變數重命名。

用plyr包中的rename()函數,可用於修改變數名。格式為:rename(dataframe,c(oldname="newname", oldname="newname",...))

5、含有缺失值的算術表達式和函數的計算結果也是缺失值。

例如:

x <- c(1, 2, NA, 3)

y <- x[1] + x[2] + x[3] + x[4]

z <- sum(x)

由於x中的第3個元素是缺失值,所以y和z也都是NA(缺失值)。

而na.rm=TRUE選項,可以在計算之前移除缺失值並使用剩餘值進行計算:

x <- c(1, 2, NA, 3)

y <- sum(x, na.rm=TRUE) 這裡,y等於6。另外:na.omit()可以刪除所有含有缺失數據的行,格式為newdata <- na.omit(mydata)

6、日期值:

  • 日期值的默認輸入格式為yyyy-mm-dd。

mydates <- as.Date(c("2007-06-22", "2004-02-13"))將默認格式的字元型數據轉換為了對應日期。

dates <- as.Date(strDates, "%m/%d/%Y")則使用mm/dd/yyyy的格式讀取數據。

Sys.Date()可以返回當天的日期

date()則返回當前的日期和時間。

  • 函數format(x, format="output_format")來輸出指定格式的日期值

  • 時間間隔可以用「-」減號進行

也可以用difftime()來計算

  • as.character()可將日期值轉換為字元型

7、R語言中類型轉換常用函數如下:

8、數據排序:使用order()函數對一個數據框進行排序。默認的排序順序是升序。在排序變數的前邊加一個減號即可得到降序的排序結果。

例如:

將這個數據集按年齡升序排序,結果如下:

  • 這句代碼:newdata<-stuff[order(stuff$gender,stuff$age),]則將數據中的性別和年齡依次排序,結果如下;

  • 在變數前加減號則降序排序:newdata<-stuff[order(stuff$gender,-stuff$age),],執行結果如下:

注意order()函數中若有兩個變數,則先對第一變數進行排序,再對第二個變數進行排序。

9、數據集的合併

添加列有兩個函數可以完成

  • merge():格式: total<- merge(dataframeA, dataframeB, by="ID"),通過共有變數「ID」來聯結

  • 用cbind()進行橫向合併:total <- cbind(A, B) 每個對象必須擁有相同的行數,以同順序排序。

添加行可用以下方法

  • 要縱向合併兩個數據框(數據集),用rbind()函數:total <- rbind(dataframeA, dataframeB)

兩個數據框必須擁有相同的變數,不過它們的順序不必一定相同。如果dataframeA中擁有

dataframeB中沒有的變數,在合併它們之前做以下某種處理:

? 1、刪除dataframeA中的多餘變數;

? 2、在dataframeB中創建追加的變數並將其值設為NA(缺失)。

10、數據集取子集

以下表為例子

  • 選入變數q1~q5:

方法1:newdata <- leadership[, c(5:9)]

方法2:myvars <- c("q1", "q2", "q3", "q4", "q5")

newdata <-leadership[myvars]

方法3:myvars <- paste("q", 1:5, sep="") newdata <- leadership[myvars]

這三種方法得到的結果均為:

  • 剔除變數

方法1:myvars <- names(leadership) %in% c("q3", "q4")

newdata <- leadership[!myvars]

該語句names(leadership) %in% c("q3", "q4")生成c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE),因為leadership中的變數只有第七個和第八個與之匹配,因此為TRUE。

方法2:newdata <- leadership[c(-7,-8)],在某一列的下標之前加一個減號(–)就會剔除那一列。

方法3:leadership$q3 <- leadership$q4 <- NULL

三種方法運行的結果為:

  • 選入行(觀測)

對於該表

例1:假如我們要選入前三行,則代碼如下:newdata <- leadership[1:3,],結果如下:

例2:代碼:newdata <- leadership[leadership$gender ==M& leadership$age>30,]則是選出年齡大於30的男性,結果如下:

除此之外還有subset()函數來選擇行,讓代碼變得簡單。例如:選擇所有age值大於等於35或age值小於24的行,保留了變數q1到q4,

代碼如下: newdata <-subset(leadership,age>=39 | age<24,select=c(q1,q2,q3,q4))

其中select = c(q1,q2,q3,q4)也可以寫成 select = q1:q4 結果均如下:

  • 隨機抽樣

    可用sample()函數進行;

    例如:從leadership數據集中隨機抽取一個大小為3的樣本

    代碼:mysample <-leadership[sample(1:nrow(leadership),3,replace = FALSE),]

結果:

11、使用SQL語句操作數據框

例如:選出leadership中大於30歲的行

代碼:newdf<-sqldf("select * from leadership where age >30")

通過對以上方法的學習,我們可以將數據進行規整,為之後的數據分析做好準備工作。
推薦閱讀:

逐夢人
知乎Live數據面面觀
武漢兩日游線路推薦
回顧與展望轉行數據科學路上的點點滴滴(2016-2018)
如何用python的sklearn的機器學習,實現簡單線性回歸分析?

TAG:R編程語言 | 數據分析 | 數據預處理 |