標籤:

《R語言實戰》第四關(第五章)學習筆記及實踐

第五章 高級數據管理

在數據處理方面有了進一步的認識,由於以前也會經常處理數據,所以這章理解起來較為順利,不過R在數據整合方面有很強的功能,reshape2包可以對數據結構有很多種處理。

數值和字元處理函數

abs(x) 絕對值

sqrt(x) 平方根

ceiling(x) 不小於x的最小整數

floor(x) 不大於x的最大整數

trunc(x) 向0的方向截取的x中的整數部分

round(x,digits=n) 將x舍入為指定位的小數

signif(x,digits=n) 將x舍入為指定的有效數字位數

cos(x)、sin(x)、tan(x) 餘弦、正弦和正切

acos(x)、asin(x)、atan(x) 反餘弦、反正弦和反正切

cosh(x)、sinh(x)、tanh(x) 雙曲餘弦、雙曲正弦和雙曲正切

acosh(x)、asinh(x)、atanh(x) 反雙曲餘弦、反雙曲正弦和反雙曲正切

log(x,base=n) 對x取以n為底的對數

log(x)、log10(x) 對數

exp(x) 指數函數

mean(x) 平均數

median(x) 中位數

sd(x) 標準差

var(x) 方差

mad(x) 絕對中位差

quantile(x,probs) 求分位數。其中x為待求分位數的數值型向量,probs為一個由[0,1]之間的概率值組成的數值向量

range(x) 求值域

sum(x) 求和

diff(x,lag=n) 滯後差分,lag用以指定滯後幾項

min(x) 求最小值

max(x) 求最大值

scale(x,center=TRUE,scale=TRUE) 為數據對象x按列進行中心化(center=TRUE)或標準化(center=TRUE,scale=TRUE)

nchar(x) 計算x中的字元數量

substr(x,start,stop) 提取或替換一個字元向量中的子串

grep(pattern,x,ignore.case=FALSE,fixed=FALSE) 在x中搜索某種模式

sub(pattern,replacement,x,ignore.case=FALSE,fixed=FALSE) 在x中搜索pattern,並以文本replacement將其替換

strsplit(x,split,fixed=FALSE) 在split處分割字元向量x中的元素

paste(…,sep="") 連接字元串,分隔符為sep

toupper(x) 大寫轉換

tolower(x) 小寫轉換

grep()、sub()和strsplit()能夠搜索某個文本字元串(fixed=TRUE)或某個正則表達式(fixed=FALSE,默認值為FALSE)

length(x) 對象x的長度

seq(from,to,by) 生成一個序列

rep(x,n) 將x重複n次

cut(x,n) 將連續型變數x分割為有著n個水平的因子

pretty(x,n) 創建美觀的分割點

cat(...,file="myfile",append =FALSE) 連接...中的對象,並將其輸出到屏幕上或文件中apply(x,MARGIN,FUN,...)將一個任意函數「應用」到矩陣、數組、數據框的任何維度上(MARGIN=1表示行,MARGIN=2表示列)

lapply()和sapply()則可將函數應用到列表(list)上

由於概率論和統計學已經基本忘光了,各種分布也是一臉茫然,所以這章關於概率函數這塊還需要加強。

控制流

for結構 for (var in seq) statement

while結構 while (cond) statement

if-else結構 if (cond) statement;if (cond) statement1 else statement2

ifelse結構 ifelse(cond, statement1, statement2)#若cond為TRUE,則執行第一個語句;若cond為FALSE,則執行第二個語句。

switch結構 switch(expr, ...)#其中的...表示與expr的各種可能輸出值綁定的語句。

用戶自編函數

myfunction <- function(arg1, arg2, ... ){

statements

return(object)}

整合與重構

函數t()對一個矩陣或數據框進行轉置

aggregate(x,by,FUN) 摺疊數據,理解下來與分組類似

reshape2包

融合melt(資料庫,id=列)、重鑄dcast(資料庫,標識符~variable,fun)

模糊查詢select()

starts_with("abc")

ends_with("xyz")

contains(「ijk」)

matches("(.)\1")

重命名(比第二講的重命名簡單點)

rename(X,newname=oldname)

去除缺失值

filter(X,!is.na(列名))

排序(和order()函數差不多)

arrange():desc降序

分組函數group_by()

組合函數summarise()

管道:%>%

實踐內容

#安裝使用包

install.packages("dpylr")

library("dplyr", lib.loc="~/R/win-library/3.3")

library("ggplot2", lib.loc="~/R/win-library/3.3")

library("stringr", lib.loc="~/R/win-library/3.3")

#自定義函數

add<-function(x,y){

z<-x+y

return(z)

}

#測試函數

a<-add(1,2)

a

[1] 3

#for循環語句

data<-c(1,2,3)

for(i in data){print(str_c("第幾次吃飯",i,sep=""))} 這裡有個疑問sep=""不用輸出是一樣的,是不是可以默認不用呢

#while循環語句

i<-10

while(i>0){i<-i-1}

#條件語句

money<-100

if(money>0){

money<-money-30

print("還有錢")

}else{

print("沒有錢")

}

#定義函數

everyday1<-function(eat,money){

if(money>=5){

for(i in eat){

if(money>=5){

money<-money-5

}

else break

eatNumber<-str_c("今天吃第幾次飯:",i,sep="")

print(eatNumber)

}

}

if(money<5){

print("錢包沒錢了:去銀行取點錢花")

}else{

print("錢包還有錢:不用去銀行")

}

}

#安裝包

library("nycflights13", lib.loc="~/R/win-library/3.3")

#選擇子集select

myflights<-select(flights,year,month,day,dep_delay,arr_delay,distance,dest)

#模糊查詢

myFlights<-select(flights,year:day,ends_with("delay"),distance,dest)

#列名重命名

myFlights<-rename(myFlights,destination=dest)

#去除缺失值

myFlights<-filter(myFlights,!is.na(dep_delay),!is.na(arr_delay))

#按條件挑選數據

filter(myFlights,month==12,day==25) 和語句

filter(myFlights,arr_delay>120|dep_delay>120) 或語句

#數據計算

by_dest<-group_by(myFlights,destination) #按照目的地分組,destination將作為一個鍵

delay<-summarise(by_dest,count=n(),dist=mean(distance,na.rm=TRUE),delay=mean(arr_delay,na.rm = TRUE)) #將數據組合,這時是按照destination進行組合

#移除噪音數據

delay<-filter(delay,count>20)

#數據顯示:data=delay選擇數據;geom_poin散點圖;aes美學的

ggplot(data=delay)+geom_point(mapping=aes(x=dist,y=delay))

#加平滑線ggplot(data=delay)+geom_point(mapping=aes(x=dist,y=delay))+geom_smooth(mapping =aes(x=dist,y=delay) )

經過連續一周的強突擊,我學到了不少關於R語言的知識,接下來一周要每天抽出兩個小時的時間對以前內容進行復盤,剩下的時間多操作,將dpylr,ggplot2,stringr三個包完全弄懂。加油!!!


推薦閱讀:

R簡單數據處理和分析
MySQL入門及其與R的交互
數據處理及分析-讀寫Excel
如何用R語言爬取網頁表格數據節省一天工作時間
R語言數據可視化——顏色綜合運用與色彩方案共享

TAG:R |