大家在學習R語言的時候,大多參考《R語言實戰》這本書,但這本書年代過於久遠(中文第二版是2016年),主要著力點也是在R base上,R語言可視化的ggplot2包也只是簡要介紹,而對於tidyverse包,《R語言實戰》並未涉及,這也導致R語言的學習難度增加,今天我們給大家引入tidyverse包的學習。
mydata <- tibble(x1=c(2,2,6,4), x2=c(3,4,2,8))##傳統方法 mydata$sum <- mydata$x1+mydata$x2 mydata <-transform(mydata,sumx=x1+x2) attach(mydata) sum <- x1+x2 detach(mydata)##dplyr mydata %>% mutate(sumx=x1+x2, meanx=sumx/4)##dplyr允許使用管道%>%操作,且meanx可以引用sumxselect()使我們能夠快速聚焦在有用的數據子集上:
df <- tibble( name = c("Alice", "Alice", "Bob", "Bob", "Carol", "Carol"), type = c("english", "math", "english", "math", "english", "math"), score = c(95, 83, 89, 67, 90, 78))df %>% select(1,2) ##選取1,2列df %>% select(name,score)df %>% select(-3)##同樣也可以用start_with 或 end_with篩選出具有前綴或者後綴的列df %>% select(start_with("n"))filter()是對數據行方向的選擇和篩選,選出符合我們條件的某些行:df %>% filter( type== "english", score>85)df %>% filter( between(score, 80, 90))summarize()主要用於統計,往往與其他函數配合使用,比如計算所有同學考試成績的均值:df %>% filter(type=="english")%>% summarize( mean_english==mean(score) sd_english=sd(score) )#R base包中涉及到排序的包括 sort(),rank(),order(),而在dplyr包中與排序相關的是arrange()包,默認是從高到低進行排序,如果變換排序順序則可以使用-(變量)或者desc(變量)。
df %>% arrange(score)df %>% arrange(-score)df %>% arrange(desc(score))df %>% arrange(type, score) group_by可以對原數據框進行分組計算,例如對於我們本文中的數據框,我們如果對個人或者科目感興趣的話,可以使用group_by(name或者type),然後利用summarize函數就可以求出分類之後的各個統計值。df %>% group_by(name) %>% summarise( mean_score = mean(newscore), sd_score = sd(newscore) )今天對於tidyverse包的介紹先到這裡,tidyverse包的語法相比R base包更為容易記,樣式較方便,在數據處理上快捷方便,仔細學習tidyverse包後相信大家會真正體會到R 語言是一門神奇且方便的語言。
我們建立了一個讀者交流群,添加小編微信,拉你入群: