《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 |