r语言论坛 r语言教程推荐_r语言data.frame


base R first,学习的流程基本是先了解变量的类型、数据的结构,再深入点就会学到循环与自定义函数。有些类似于先认识编程,再按照数据处理、可视化、统计分析等应用方向开始下一个学习的旅程。但是对于很多人来说,R仅仅是一个可视化工具,来做出漂亮的图,或者是一个可以方便的做回归分析,生存分析,显著性检验的统计工具。那么, tidyverse就提供了一个很好的学习思路( tidyverse first),让我们先忽略编程这道大关,其理念是一开始不谈向量、矩阵、数据框、因子、流程控制等概念,直接从数据的操纵入手,让初学者在最短时间内学会数据的处理与可视化应用。 有这么一句话“数据分析师的80%的时间,都消耗在数据清理上”,清理出可视化和统计分析可以直接使用的数据,往往最费精力和繁琐的过程,而tidyverse的一大亮点就是提供非常优秀的数据清理、整合和可视化的“一站式服务”。

tidyverse 是什么


r语言论坛 r语言教程推荐_dataframe第二列 r语言_02


tidyverse出自于R大神Hadley Wickham之手,他是Rstudio首席科学家,也是ggplot2的作者。tidyverse就是他将自己所写的包整理成了一整套数据处理的方法,包括ggplot2,dplyr,tidyr,readr,purrr,tibble,stringr, forcats。同时也出了一本《R for Data Science》,这本书里面也详细介绍了tidyverse的使用方法。

ggplot2, for data visualisation. (画图,可视化数据) dplyr, for data manipulation. (操控数据,过滤、排序等) tidyr, for data tidying. (清理数据,转为ggplot可用的格式) readr, for data import. (从文件中读取数据) purrr, for functional programming. (提供好用的编程函数) tibble, for tibbles, a modern re-imagining of data frames. (data.frame升级款) stringr, for strings. (处理字符,查找、替换等) forcats, for factors. (处理因子问题)

tidyverse的安装也很简单,在R中输入以下命令:


#安装包
install.packages("tidyverse")
#使用前,记得载入包
library(tidyverse)



tidyverse的数据处理流程大致分为以下三类: 1. 数据导入 2. 数据整理 3. 数据探索(可视化,统计分析)

数据导入

readr:readcsv(); readtsv(); readdelim(); readfwf(); readtable(); readlog(); readxl:readxls(); readxlsx(); haven:打开SAS 、SPSS、Stata等外部数据。

以read_csv为例,把需要分析的数据存为csv文件(逗号分隔的文件,execl文件可以另存为csv文件),然后R读取即可:


data <- read.csv("data_for_input.csv")


类似的,readtsv()可以读取tab分隔的数据,readxls()可以直接读取execl的数据。


数据整理

tibble格式

R中的对多变量数据的标准保存形式是 dataframe,而tibble是dataframe的进化版,它有如下优点: 1. 生成的数据框数据每列可以保持原来的数据格式,不会被强制性改变,即字符串,不会莫名其妙的变成因子格式; 2. 查看数据时,不再会一行显示不下,多行显示得非常丑; 3. 数据操作速度会更快

如下图,直接查看tibble格式的数据,可以一目了然的看清数据的大小和每列的格式


r语言论坛 r语言教程推荐_r语言data.frame_03


有两种方式来创建tibble格式的数据 1. 直接创建


r语言论坛 r语言教程推荐_dataframe第二列 r语言_04


2. 其他格式转化,例如用read.csv读取的数据默认是dataframe格式,就可以使用as_tibble转换为tibble格式


r语言论坛 r语言教程推荐_r语言read.xlsx编码_05


管道函数 %>%

在tidyverse中,管道符号是数据整理的主力,它的功能和Linux上的管道符“|”类似,可以把许多功能连在一起,而且简洁好看,比起R的基本代码更加容易阅读!

x %>% f(y) means that x is‘piped’ into the function f(x,y)

以R中自带的iris(鸢尾花数据集)为例:


r语言论坛 r语言教程推荐_r语言data.frame_06


%>% 的作用就是将iris数据用于管道后面的head函数。

dplyr包

dplyr基本包含了我们整理数据的所有功能,堪比瑞士军刀,这里介绍以下函数: filter: filters out rows according to some conditions (根据条件过滤数据) arrange: reorders rows according to some conditions (根据某一列的数据对行排序) select: selects a subset of columns (只保留部分列的数据) mutate: adds a new column as a function of existing columns (增加新的列) summarise: collapses a data frame to a single row (概述数据的统计特征) group_by:

1. filter

只选取Species列中,值为virginica的数据 (这里也是用到了管道符,将filter函数作用于iris数据)


r语言论坛 r语言教程推荐_r语言论坛_07


选取Species为virginica,并且Sepal.Length大于7.5的数据


r语言论坛 r语言教程推荐_r语言论坛_08


2. select

只保留Species 和 Sepal.Length 这两列


r语言论坛 r语言教程推荐_r语言论坛_09


除了Species以外,其他的列都保留


r语言论坛 r语言教程推荐_r dataframe 转成向量_10


利用管道符,先过滤(filter),然后只保留Petal.Width函数(select)


r语言论坛 r语言教程推荐_r语言data.frame_11


3. mutate

增加一列,列名为Sepal.Area,值为width和length相乘,然后不保留原来的Sepal.Length 和 Sepal.Width两列


r语言论坛 r语言教程推荐_r语言data.frame_12


4. summarise

下面的例子的summarise中, n() 是统计有多少行的数据,mean() 函数是计算平均值。 利用summarise可以指定统计的列,或者统计方式(求方差,求和等),最后得到的结果形成一个新的数据。


r语言论坛 r语言教程推荐_r语言data.frame_13


5. summarise & group_by

group_by通常与summarise搭配使用,如果我们需要对不同species的数据计算均值,那么利用group_by指定需要分组的列,summarise就帮我们统计出了结果,避免一个一个的去求均值


r语言论坛 r语言教程推荐_r语言data.frame_14


tidyr包

tidyr的两个主要函数是 gather()spread()。这些函数允许在长数据格式(long data)和宽数据格式(wide data)之间进行转换(功能类似于reshape包,但是比reshape更好用,并且可以用于管道%>%连接)。

gather()


r语言论坛 r语言教程推荐_dataframe第二列 r语言_15


spread() 把数据从长数据(long)还原成宽数据(wide),对比gather()的变换,指定你需要变长的key和value列即可~


r语言论坛 r语言教程推荐_r语言data.frame_16


数据探索

可视化:ggplot2

利用ggplot2实现可视化,具体的ggplot2就不做详细的介绍了,这里提供ggplot2的速查表(cheatsheet),可以很方便的知道哪种图对应的ggplot2里面的哪个函数。原始的cheatsheet pdf版的获取方式见微信公众号本文。


r语言论坛 r语言教程推荐_r语言data.frame_17


r语言论坛 r语言教程推荐_dataframe第二列 r语言_18


统计:broom

broom是一个用于数学建模的包,以回归分析为例,R中的各种回归分析往往不会返回一个整齐的data frame结果,而broom 则帮助我们直接将统计结果转化为data frame格式直接将统计结果转化为data frame格式。

下图是一般的回归分析结果的格式


r语言论坛 r语言教程推荐_r语言read.xlsx编码_19


下面是broom对 fit 格式化之后的结果,可以看到是一个方便读取的data frame格式。


r语言论坛 r语言教程推荐_r dataframe 转成向量_20


同样,也可以与tidyverse中的管道和group_by结合,批量的做回归分析,并且得到整理好的结果。


r语言论坛 r语言教程推荐_r dataframe 转成向量_21


r语言论坛 r语言教程推荐_r语言read.xlsx编码_22


总结 初学者从tidyverse 入门是一个不错的使用R的切入方式,它提供了一整套data science的工具,而且还特别好用。当然,入门之后如果使用者在未来需要使用R完成更细腻的分析时,再分配较充足的时间学习base R。