书籍网址:https://r4ds.had.co.nz/
The tidyverse is an opinionated collection of R packages designed for data science. All packages share an underlying design philosophy, grammar, and data structures.Install the complete tidyverse with:
- install.packages("tidyverse")
library(tidyverse) #加载以下tidyverse中核心的packages:
ggplot2:画图,可视化数据
dplyr:操控数据,过滤、排序等
tidyr:清理数据
readr:(从文件中读取数据
purrr:(提供好用的编程函数
tibble:data.frame升级款
stringr:处理字符,查找、替换等
forcats:处理因子问题
- install.packages("tidyverse") #安装包 关联的包比较多,耐心等待一会儿library(tidyverse) #使用前,记得载入包
以下讲:readr(读)、tibble(类型)、%>%(管道)、dplyr(加减乘除)、tidyr(透视/反透视)、ggplot2(可视化)
01
—
readr:数据导入/读取
readr comes with five parsers for rectangular file formats:
- read_csv() and read_csv2() for csv files,csv文件(逗号分隔的文件,execl文件可以另存为csv文件)【必学】
- read_tsv() for tabs separated files
- read_fwf() for fixed-width files
- read_log() for web log files
- > df <- read_csv("df.csv")
- -- Column specification -------------------------------------------------------------------cols( Sepal.Length = col_double(), Sepal.Width = col_double(), Petal.Length = col_double(), Petal.Width = col_double(), Species = col_character())
- > df# A tibble: 150 x 5 Sepal.Length Sepal.Width Petal.Length Petal.Width Species
读取其他格式数据:
readxl:readxls(); readxlsx();
haven:打开SAS 、SPSS、Stata等外部数据。
02
—
tibble:高级数据框(data.frame升级版)
——数据(列)类型一目了然
tibble是R语言中一个用来替换data.frame类型的扩展的数据框,tibble继承了data.frame,是弱类型的,同时与data.frame有相同的语法,使用起来更方便。tibble包,也是由Hadley开发的R包。
tibble对data.frame做了重新的设定:
tibble,不关心输入类型,可存储任意类型,包括list类型
tibble,没有行名设置 row.names
tibble,支持任意的列名
tibble,会自动添加列名
tibble,类型只能回收长度为1的输入
tibble,会懒加载参数,并按顺序运行
tibble,是tbl_df类型
tibble是data.frame的进化版,有如下优点:生成的数据框数据每列可以保持原来的数据格式; 查看数据时,不再会一行显示不下(会自动隐藏一部分,自带head);有两种方式来创建tibble格式的数据:
1. 直接创建
- > x <- c(1:3)> y <- c(4:6)> z <- letters[1:3]> dft <- tibble(x,y,z) # > dft# A tibble: 3 x 3 x y z <int> <int> <chr>1 1 4 a 2 2 5 b 3 3 6 c
2. 其他格式转化,使用as_tibble转换为tibble格式
- > dft_1 <- as_tibble(mtcars)
更多:http://blog.fens.me/r-tibble/
03
—
%>%:管道函数
——将左侧的值应用到右侧数据data位置
管道函数在tidyverse中,管道符号是数据整理的主力,可以把许多功能连在一起,而且简洁好看,比起R的基本代码更加容易阅读!例如:x %>% f(y) 等价于 f(x,y)
Rstudio中快捷键: ctrl+shift+m
以R中自带的iris(鸢尾花数据集)为例:
- > head(iris,n=3) Sepal.Length Sepal.Width Petal.Length Petal.Width Species1 5.1 3.5 1.4 0.2 setosa2 4.9 3.0 1.4 0.2 setosa3 4.7 3.2 1.3 0.2 setosa
- > iris %>% head(n=3) # %>% 的作用就是将iris数据用于管道后面的head函数。 Sepal.Length Sepal.Width Petal.Length Petal.Width Species1 5.1 3.5 1.4 0.2 setosa2 4.9 3.0 1.4 0.2 setosa3 4.7 3.2 1.3 0.2 setosa
04
—
dplyr:数据整理
dplyr包的下述五个函数用法
4.1 筛选: filter4.2 排列: arrange
4.3 选择: select
4.4 变形: mutate
4.5 汇总: summarise
4.6 分组: group_by
- # install.packages("dplyr")library(dplyr)
4.1 筛选: filter()
#按给定的逻辑判断筛选出符合要求的子数据集
- filter(mtcars_df,mpg==21,hp==110) #按给定的逻辑判断筛选出符合要求的子数据集
4.2 排列: arrange()
- arrange(mtcars_df, disp) #可对列名加 desc(disp)进行降序
4.3 选择: select()
- > select(mtcars_df, disp:wt) #用列名作参数来选择子数据集:
4.4 变形: mutate()
- #取行#取1:dim(mtcars_df)[1]行mutate(mtcars_df, NO = 1:dim(mtcars_df)[1])
- #数值重定义和赋值#将Ozone列取负数赋值给new,然后Temp列重新计算为(Temp - 32) / 1.8mutate(airquality, new = -Ozone, Temp = (Temp - 32) / 1.8)
4.5 汇总: summarise()
- #对数据框调用其它函数进行汇总操作summarise(mtcars_df,mdisp = mean(disp, na.rm = TRUE))
4.6 分组: group_by()
- #当对数据集通过group_by()添加了分组信息后,mutate(),arrange() 和 summarise() 函数会自动对这些 tbl 类数据执行分组操作。
05
—
tidyr:数据整理
tidyr的两个主要函数是 gather()和 spread()。这些函数允许在长数据格式(long data)和宽数据格式(wide data)之间进行转换(功能类似于reshape包,但是比reshape更好用,并且可以用于管道%>%连接)。tidyr包的下述四个函数用法5.1 宽数据转为长数据:gather (excel透视表反向操作)5.2 长数据转为宽数据:spread (excel透视表功能)5.3 多列合并为一列:unit5.4 将一列分离为多列:separat
- #install.packages("tidyr") #安装tidyr包library(tidyr)
5.1 宽数据转为长数据:gather()
类似excel透视表反向操作
图片解析参考:https://www.zhihu.com/collection/467554113#gather(data, key, value, …, na.rm = FALSE, convert = FALSE)
#data:需要被转换的宽形表#key:将原数据框中的所有列赋给一个新变量key
#value:将原数据框中的所有值赋给一个新变量value
#…:可以指定哪些列聚到同一列中#na.rm:是否删除缺失值
- widedata <- data.frame(person=c('Alex','Bob','Cathy'),grade=c(2,3,4),score=c(78,89,88))#widedata# person grade score#1 Alex 2 78#2 Bob 3 89#3 Cathy 4 88
- longdata <- gather(widedata, variable, value,-grade)#longdata# person variable value#1 Alex grade 2#2 Bob grade 3#3 Cathy grade 4#4 Alex score 78#5 Bob score 89#6 Cathy score 88
5.2 长数据转为宽数据:spread()
类似excel透视表操作
图片解析参考:https://www.zhihu.com/collection/467554113
- #spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE)
5.3 多列合并为一列:unit()
- #unite(data, col, …, sep = “_”, remove = TRUE)#data:为数据框
6.4 将一列分离为多列:separate()
- #separate()函数可将一列拆分为多列,一般可用于日志数据或日期时间型数据的拆分,语法如下:#separate(data, col, into, sep = “[^[:alnum:]]+”, remove = TRUE,#convert = FALSE, extra = “warn”, fill = “warn”, …)#data:为数据框#col:需要被拆分的列#into:新建的列名,为字符串向量#sep:被拆分列的分隔符#remove:是否删除被分割的列
- widesep <- separate(wideunite, information,c("person","grade","score"), sep = "-")widesep
- # person grade score#1 Alex 2 78#2 Bob 3 89#3 Cathy 4 88
07
—
ggplot2:R语言经典可视化包
R语言 高阶可视化绘图系统:ggplot2入门 | 第8讲