16. Tidyverse

  1. Introduce

      tidyverse就是Hadley Wickham将自己所写的包整理成了一整套数据处理的方法.简单来说是package的集合.

    image.png

      下面从各个功能来介绍Tidyverse的使用.我们先把数据读入.

    dog_info = read.table(file='dog_info.tsv',row.name=1,head=T)
    dog_scores = read.table(file='dog_scores.tsv')
    

    image.png

  2. 数据格式转换

  在tidyverse旧版,我们要用tidyverse处理表格类数据,需要先去除表格的行名.这是tibble的数据结构,可以称为tibble,但现在新版支持,所以可以不去除行名(旧版是部分指令比如select不支持).下面主要用tidyrtibble两个包.

  虽然tidyverse现在可以处理DataFrame格式,但处理时还是尽量转成tibble的格式.主要是tibble有一些特点,比如读取快,不会改变表的数据格式等,现在R主要还是使用tibble.

2.1 行列转换

  可以理解为转置.

t(dog_scores)

image.png

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')

image.png

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,表示第一列除外

image.png

  • 长转宽
pivot_wider(dog_score3,names_from='subject',values_from='scores')
#names_from : 列名来源
#values_from : 值来源

  插句题外话,我们在加载tidyverse的时候,会提示warning.表示已经加载进来,而conflicts后面表示dplyr::filter替代了stats::filter.如果我们要用stats::filter,就必须前称全写.

image.png

  1. dplyer 数据处理

  dplyer是核心包.照常,我们需要先把数据格式转为无行名的格式.

dog_info2 = rownames_to_column(dog_info,var='dog')
dog_info2

image.png

3.1 数据筛选 filter

  首先是按列筛选,这里举个年龄% mutate(rate=row_number())