向右操作符及其相關函數的基本用法
從2017年6月接觸R開始,覺得R的可視化的顏值很高,所以很感興趣打算認真的學習R,但是因為各種原因總是斷斷續續,最近越是分析數據越發現,自己浪費太多在數據整理的方面,所以覺得學習關於數據整理和基本統計描述的方法很重要,接觸%>%發現,這個真的是個神器,所以把自己理解的進行記錄。(寫公眾號最主要目的只是方便自己以後分析忘了可以通過公眾號查看,所以可能內容不完整甚至可能有錯誤)
關於向右操作符運用(%>%)
1.什麼是%>%?(其實我並不知道準確的解釋,只是個人理解)
database1 %>% database2,我的理解是database1作為input,把數據集的信息傳遞給database2運用,他就像一個快遞員,將你需要的數據完完整整的傳遞下去,然後供你進行下一步的分析;
感覺%>%只是數據分析的流水線上的快遞員,所以為了更好的運用管道函數,只是有快遞員還不行,還需要一些相關函數的支持。
2. 相關的函數包括什麼?
select()進行選擇columns
filter() 根據條件選擇rows
mutate() 進行增加新的變數
case_when 進行變數的重新的賦值,跟ifelse等的用法相似,個人很喜歡這個函數,這個與SAS中語法相似
arrange() 根據某個變數進行排序,同order()或sort()用法
summarize() 進行基本的統計分析的過程。可以與funs()進行一起運用更好
summarize_all() 全部的變數進行統計分析
summarize_at() 可以選擇部分變數進行統計分析
summarize_if() 根據選擇的條件進行統計的分析,個人覺的特別對於有缺失值的變數特別好用
group_by() 根據某個或者多個變數進行分組進行分析
ungroup() 可以撤銷之前的分組
count()和tally()可以計算觀察的單位數,一般可根據分組進行計算,這個也可以用之前的summarize()
top_n() 當你的數據很多的時候,你可能只想看排在最前面的數據,可以運用
distinct() 根據變數選擇沒有重複的變數,與unique()用法相同
gather() 將長數據轉換成寬數據,跟melt()作用相同
spread() 將寬數據轉化成長數據的形式,與cast()作用相同
inner_join(x, y, by =, ...) by時合併根據的variable(s),其中合併時兩者都有進行保留,具體建議看R幫助
left_join(x, y, by =, ...) 以x為基礎進行數據的合併,這部分主要還是看R幫助吧
right_join(x, y, by =, ...) 以y為基礎進行數據的合併
full_join(x, y, by=, ...) 合併時x和y均保留
semi_join(x, y, by =, ...) x和y進行合併,保留兩者共有的,但是只保留x的變數
anti_join(x, y, by =, ...) x和y進行合併,保留兩者不同的,但是只保留x的變數
replace_na() 進行缺失值的替換
separate() turns a single character column into multiple columns(感覺幫助的英文解釋很到位)
相關的運用太多,還有的函數還沒有進行研究。。。
3.怎麼實踐運用?
具體代碼的運用,其中以mpg的數據集進行運用,mpg的信息可查看R幫助,這就不說明了
####第一步下載相應的包和進行數據的初步數據信息查看
####下載包
install.packages("dplyr")
install.packages("ggplot2")
####載入包
library(dplyr)
library(ggplot2)
####查看mpg數據集的基本信息
str(mpg)
####第二步進行缺失值的查看
sum(is.na(mpg$manufacturer)) ###其他同理
【結果】
>sum(is.na(mpg$manufacturer)) ###其他同理
[1] 0
###如果數據量較大,同時缺失值很多,可以考慮全部進行缺失值的查看
#####其中funs()是表示function的含義,可以有sum,mean,sd等用法
missing_var% summarize_all(funs(sum(is.na(.))))
【結果】
> missing_var%summarize_all(funs(sum(is.na(.))))
> missing_var
manufacturer model displ year cyl trans drv cty hwy fl class class_n
####如果要查看缺失值所佔的比例,不過這個數據集是沒有缺失值的
missing_var% summarize_all(funs(sum(is.na(.))/n()))
#####進行缺失值的可視化
####首先進行寬數據轉換為長數據
missing_value
#####利用ggplot進行數據的可視化,利用條圖展示缺失值所佔的比例,但是本數據沒有缺失值
missing_value %>%
ggplot(aes(x=reorder(feature,-missing_var),y=missing_var)) +
geom_bar(stat="identity",fill="lightblue") +
theme_bw()
#####第三步 進行統計描述
####根據不同的class分組進行查看觀察值的個數,並輸出排在前三位的值
mpg %>%
group_by(class) %>%
count() %>%
arrange(desc(n)) %>%
ungroup() %>%
top_n(3,n)
【R結果】
# A tibble: 3 x 2
classn
1 suv62
2 compact47
3 midsize41
####還可以每種class佔總體的比例
mpg %>%
group_by(class) %>%
count() %>%
mutate(proportion=n/nrow(mpg))
arrange(desc(n)) %>%
ungroup()
###如果你想將class進行變數的變換,即把class文字轉換成數字,可以運用case_when
mpg%
mutate("class_n"=case_when(class=="2seater"~1,
class=="compact"~2,
class=="midsize"~3,
class=="minivan"~4,
class=="pickup"~5,
class=="subcompact"~6,
class=="suv"~7))
####數據就分析到這,自己能想到的用法全部寫完了,結果不好呈現,就不報告結果了。
#####其它相關的函數的運用,例子均來自R的幫助
####關於case_when用法的補充,有時候我們只想轉換x的部分數據,部分希望保持原變數值不變
x
case_when(
x < 10 ~ "low",
x < 20 ~ "median",
x < 30 ~ "high",
TRUE ~ as.character(x)
)
#####replace_na的用法,x的缺失值變成0,y的變成unknown
df
df %>% replace_na(list(x = 0, y = "unknown"))
#####數據的合併,感覺不好解釋,但是自己運行函數之後應該就會明白
# "Mutating" joins add variables to the LHS
band_members %>% inner_join(band_instruments)
band_members %>% left_join(band_instruments)
band_members %>% right_join(band_instruments)
band_members %>% full_join(band_instruments)
# "Filtering" joins keep cases from the LHS
band_members %>% semi_join(band_instruments)
band_members %>% anti_join(band_instruments)
#####spread和gather的用法
stocks
time = as.Date("2009-01-01") + 0:9,
X = rnorm(10, 0, 1),
Y = rnorm(10, 0, 2),
Z = rnorm(10, 0, 4) )
stocks
stocksm % gather(stock, price, -time)
stocksm %>% spread(stock, price)
stocksm %>% spread(time, price)
######還有相關的資料可查看
TAG:數據之旅分享 |