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,用于统计模型结果的整洁