从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)
######还有相关的资料可查看
https://www.kaggle.com/rtatman/manipulating-data-with-the-tidyverse
http://blog.csdn.net/fairewell/article/details/72878107
https://cosx.org/2014/04/use-pipeline-operators-in-r
领取专属 10元无门槛券
私享最新 技术干货