《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 的結果為23、變數重新賦值:語句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。
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[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),]
推薦閱讀:
※逐夢人
※知乎Live數據面面觀
※武漢兩日游線路推薦
※回顧與展望轉行數據科學路上的點點滴滴(2016-2018)
※如何用python的sklearn的機器學習,實現簡單線性回歸分析?