tidyverse
tidyverse包中有八个常用包,主要有ggplot2/tibble/tidyr/readr/purrr/dplyr/stringr/forcat,如果需要其他包,我们只能还是自己library。这个八个包也提供了我们一个学习的思路,反向学习,毕竟,学习R就是学习R包的过程。其次,就是tidyverse包也有其自身的含义在里面,tidy+verse就是整洁+转变,简单理解意思就是数据清洗,而整洁的数据有三个特征分别是:1.每列为一个变量(Each variable is in a column);2.每行为一个观测(Each observation is in a row);3.每个单元格为一个取值(Each value is a cell)。我们使用tidyverse的目的,就是将原始数据整理成为R可用的数据,这个过程可以成为数据清洗和特征工程等多个名字,但是其目的是一样,其作用不可忽视。每一个包中都含有一种理念和一种方法,深入理念然后掌握方法才是最关键的。
- ggplot2,用于数据可视化
- tibble,用于形成便于数据处理的数据框,数据类型定义
- tidyr,用于数据整洁,数据清理
- readr,用于读入R 格式数据,数据读取
- dplyr,用于数据操纵,数据整理
- stringr,用于处理字符串数据
- forcats,用于处理因子数据
- lubridate, 用于处理日期和时间数据(没在tidyverse中)
#加载tidyverse,出现conflicts是正常
library(tidyverse)
1.ggplot2/ggvis/ggpubr包
这个包不陌生,用来做可视化和数据探索性分析。此外,如果我们想做可以交互操作的图,可以学习一下ggvis包,这个包结合了ggplot2和shiny,可以做到简单交互作图。还有如果你觉得ggplot2作图原理有点难,你可以参考一下ggpubr包,做出的结果也很好,可以多多琢磨一下。
#关于ggvis的一个实例,在微信文中没有体现出来,可以自己用码试一下
library(shiny)
library(ggvis)
p <- mtcars %>%
ggvis(x = ~wt, y = input_select(names(mtcars), map = as.name)) %>%
layer_points()
#关于ggpubr
library(ggplot2)
library(magrittr)
library(ggpubr)
#写一个小数据框
id <- c("小明","小强","小李")
grade <- c(70,80,90)
sex <- c("男","女","男")
test <- data.frame(id,grade,sex)
#简单作图
ggbarplot(test,x="id",y="grade",fill = "sex")
2.tibble
tibble是数据框data.frame的进化版,还有data.table可以学习,对于这类数据的形式,都是为了更快的处理数据而存在的,我们都可以了解学习。遗憾的是R中并未有关于example的示例,当然大家也可以去搜张丹老师的博客,里面有对tibble的详细介绍。这里给出关于tibble的一些相关的函数,仅供参考。
名称 | 功能 |
as_tibble | 强制转换lists和matrices为数据框(data.frame) |
tibble | 创建数据框(data.frame)或列表(list) |
tribble | 智能行(Row-wise)创建tibble |
obj_sum/ type_sum/ tbl_sum | 给出对象的简明摘要:对象类型和数据框大小 |
rownames | 行名的操作工具(非常有用):可以提取行名为列或列为行名 |
has_name | 检查命名元素的存在has_name(iris, “Species”) |
repair_names | 修复对象的名称(如果没有命名则用V+i代替) |
all_equal | 数据框相等的柔性比较,忽略行和列的排列顺序 |
glimpse | 有点像str(),主要是查看数据集的结构 |
enframe | 将向量变为数据框 |
print.tbl_df | print(x,n)打印数据集x的前n行,默认为10行,有点像head() |
add_column | 给数据框添加列 |
add_row | 给数据框添加行 |
is.tibble | 检测对象是否为tibble |
knit_print.trunc_mat | 截断显示 |
#建立tibble型数据
t <- tibble(1:10,letters[1:10])
t
#查看t的数据类型,的确是数据框的
class(t)
#建一个列表数据,然后利用tibble把它变为数据框
l <- list(id=runif(11),word=letters[5:15])
l
class(l)
l <- as.tibble(l)
class(l)
3.readr包
readr包也是很熟悉,并不陌生。
readr包中主要的函数有:read_csv,read_delim,read_table,write_delim,write_csv,write_excel_csv,write_delim函数,其中read_table中分隔符是指定为固定空格的,不能修改分隔符,函数read_delim可以指定分隔符
4.tidyr包
tidyr包的作用类似于reshape2包,都是将变量变为数据,或者数据变为变量。另外的两个功能和paste类似,是数据的拆分和合并。
以及tidyr包的下述四个函数用法:
- gather—宽数据转为长数据;
- spread—长数据转为宽数据;
- unit—多列合并为一列;
- separate—将一列分离为多列;
###宽数据,就是正常的数据
test
#1. gather(data, key, value, …, na.rm = FALSE, convert = FALSE)
#data:需要被转换的宽形表
#key:将原数据框中的所有列赋给一个新变量key
#value:将原数据框中的所有值赋给一个新变量value
#…:可以指定哪些列聚到同一列中
#na.rm:是否删除缺失值
##把宽数据变长,就是把变量变成数据
#不保留变量
g1 <- gather(test,variable,value)
g1
#保留id变量,一般常用的是这种,也就是说把id看做是主键
g2 <- gather(test,varible,value,-id)
g2
#2. spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE)
#data:为需要转换的长形表
#key:需要将变量值拓展为字段的变量
#value:需要分散的值
#fill:对于缺失值,可将fill的值赋值给被转型后的缺失值
s1 <- spread(g2,varible,value)
s1
#3.unite(data, col, …, sep = “_”, remove = TRUE)
#data:为数据框
#col:被组合的新列名称
#…:指定哪些列需要被组合
#sep:组合列之间的连接符,默认为下划线
#remove:是否删除被组合的列
u1 <- unite_(mtcars, "vs_am", c("vs","am"))
head(u1)
#separate(data, col, into, sep = “[^[:alnum:]]+”, remove = TRUE,
#convert = FALSE, extra = “warn”, fill = “warn”, …)
#data:为数据框
#col:需要被拆分的列
#into:新建的列名,为字符串向量
#sep:被拆分列的分隔符
#remove:是否删除被分割的列
se1 <- u1%>%separate(vs_am, c("vs", "am"))
head(se1)
其他数据导入和建模类的包
- DBI,用于联接数据库
- haven,用于读入SPSS、SAS、Stata 数据
- httr,用于联接网页API
- jsonlite,用于读入JSON 数据
- readxl,用于读入Excel 文档
- rvest,用于网络爬虫
- xml2,用于读入xml 数据
- modelr,用于使用管道函数建模
- broom,用于统计模型结果的整洁