16. Tidyverse
- Introduce
tidyverse
就是Hadley Wickham将自己所写的包整理成了一整套数据处理的方法.简单来说是package的集合.下面从各个功能来介绍
Tidyverse
的使用.我们先把数据读入.dog_info = read.table(file='dog_info.tsv',row.name=1,head=T) dog_scores = read.table(file='dog_scores.tsv')
- 数据格式转换
在tidyverse
旧版,我们要用tidyverse
处理表格类数据,需要先去除表格的行名.这是tibble
的数据结构,可以称为tibble
,但现在新版支持,所以可以不去除行名(旧版是部分指令比如select不支持).下面主要用tidyr
和tibble
两个包.
虽然tidyverse
现在可以处理DataFrame
格式,但处理时还是尽量转成tibble
的格式.主要是tibble
有一些特点,比如读取快,不会改变表的数据格式等,现在R主要还是使用tibble
.
2.1 行列转换
可以理解为转置.
t(dog_scores)
2.2 行名转列
就是把行名变成一列.负责这个的函数在tibble包内.
library(tibble)
1. var 表示行名转列,新列的列名
rownames_to_column(dog_scores,var='dog')
题外话,我们可以输入?指令
来查看当前指令的帮助文档.
2.3 列转行名
将列转行名.要注意的是行名是Index
,不允许重复.
#这里的var 表示要转换的列
column_to_rownames(rownames_to_column(dog_scores,var='dog'),var='dog')
2.4 长宽转换
把宽表格转为长表格,反之同理.
- 宽转长
# var 表示行名转列,新列的列名
dog_score2 = rownames_to_column(dog_scores,var='dog')
#先去除行名
library(tidyverse)
#将宽表格转为长表格
dog_score3 = pivot_longer(dog_score2,c(2,3,4),names_to='subject',values_to='scores')
#names_to = 表示列名转换成值后,对应列的列名 比如上图的 yuwen shuxue wuli
#values_to = 表示原表的值转化成列值的新列名 比如 88 55 44
#c(2,3,4)是要转换的列,我们也可以用列名指定 还可以写-1,表示第一列除外
- 长转宽
pivot_wider(dog_score3,names_from='subject',values_from='scores')
#names_from : 列名来源
#values_from : 值来源
插句题外话,我们在加载tidyverse
的时候,会提示warning
.√
表示已经加载进来,而conflicts
后面表示dplyr::filter
替代了stats::filter
.如果我们要用stats::filter
,就必须前称全写.
- dplyer 数据处理
dplyer是核心包.照常,我们需要先把数据格式转为无行名的格式.
dog_info2 = rownames_to_column(dog_info,var='dog')
dog_info2
3.1 数据筛选 filter
首先是按列筛选,这里举个年龄% mutate(rate=row_number())