vlambda博客
学习文章列表

R语言 | 数据操作tidyr包



tidyr包

R语言 | 数据操作tidyr包

类似于上图成行成列的表数据是干净数据(tidy data),一般每一行表示一条观测记录,每一列表示一个字段(变量) tidyr包是用来操作tidy data的包,主要的功能有

  • 数据变形(Reshape Data)
  • 分割数据(Split Cells)
  • 处理缺失值数据(Handle Missing Values)

数据变形(Reshape Data)

数据变形(Reshape Data)可以重构数据形状,主要有gather()和spread()两个函数

gather()

tidyr::gather(data, key, value, ..., na.rm=FALSE)

  • data tibble或data frame数据
  • key 新数据中用于存放关键词的 字段名
  • value 新数据中用于存放value的 字段名
  • ... 新数据关键词来源

参数不太好理解,还是直接看下面的例子吧~

构造实验数据

library(tibble)

table4a <- tibble(
    country=c('A''B''C'),
    '1999'=c('0.7k''37k''212k'),
    '2000'=c('2k''80k''213k')
)

table4a

R语言 | 数据操作tidyr包

R语言 | 数据操作tidyr包

将上图的table4a从左侧形态转为右侧形态,

library(tidyr)
gather(table4a, key="year", value="cases"'1999''2000')

R语言 | 数据操作tidyr包


spread()

tidyr::spread(data, key, value)

构造实验数据table2

table2 <- tibble(
    country=rep(c('A''B''C'), each=4),
    year=rep(c(1999,2000), each=2, time=3),
    type=rep(c('cases''pop'), time=6),
    count=c('0.7k''19m''2k''20m''37k''172m''80k''174m''212k''1t''213k''1t')
)

table2

R语言 | 数据操作tidyr包

R语言 | 数据操作tidyr包

将上图的table2从左侧形态转为右侧形态

spread(table2, key=type, value=count)

R语言 | 数据操作tidyr包


处理缺失值

  • drop_na(data, ...)
  • fill(data, ..., direction=c("down", "up"))
  • replace_na(data, replace=list(), ...)

drop_na()

tidyr::drop_na(data, ...)  剔除掉数据中的缺失值

构造实验数据

x <- tibble(x1=c("A""B""C""D""E"),
            x2=c(1NANA3NA))
x

R语言 | 数据操作tidyr包

R语言 | 数据操作tidyr包


drop_na(x, x2)

R语言 | 数据操作tidyr包

fill()

tidyr::fill(data, ..., direction=c("down", "up")) 将数据中的缺失值进行填充(填充的值是缺失值附近的数值)

R语言 | 数据操作tidyr包

fill(x, x2)

R语言 | 数据操作tidyr包

replace_na()

tidyr::replace_na(data, replace=list(), ...) 将数据中的缺失值替换为别的值

replace_na(x, list(x2=2))

R语言 | 数据操作tidyr包

分割数据

分割数据(Split Cells)把一个单元格内的数据分为多个值。常用的函数有

  • separate() 将数据分为多个列
  • separate_rows() 将数据分为多个行
  • unite() 将多个字段(变量、列)合并到一个字段(变量、列)

separate()

tidyr::separate(data, col, into, sep)

  • data 原始数据
  • col 待分数据所在的列(字段、变量)
  • into 分割后形成的数据对应的字段(变量)
  • sep 分割数据时使用的风格符

构造实验数据table3

table3 <- tibble(
    country=rep(c("A""B""C"), each=2),
    year=rep(c(19992000), time=3),
    rate=c("0.7k/19m""2k/20m""37k/172m""80k/174m""212k/1t""213k/1t")
)

table3

R语言 | 数据操作tidyr包

R语言 | 数据操作tidyr包

将上图的table3从左侧形态转为右侧形态

separate(table3, col=rate, into=c("cases""pop"), sep="/")

R语言 | 数据操作tidyr包

separate_rows()

tidyr::separate_rows(data, ..., sep)

  • data 原始数据
  • ... 待分数据所在的列(字段、变量)
  • sep 分割数据时使用的风格符

R语言 | 数据操作tidyr包

将上图的table3从左侧形态转为右侧形态

separate_rows(table3, rate, sep='/')

R语言 | 数据操作tidyr包

unite()

tidyr::unite(data, col, ..., sep)

  • data 原始数据
  • col  新生成的字段(变量、列)名
  • ... 合并前的字段(变量、列)名
  • sep 合并使用的分割符

构造实验数据table5

table5 <- tibble(
    country=rep(c("Afghan""Brazil""China"), each=2),
    century=rep(c('19''20'), time=3),
    year=rep(c('99''00'), time=3)
)

table5

R语言 | 数据操作tidyr包

将上图的table5从左侧形态转为右侧形态

unite(table5, col="year", century, year, sep="")


R语言相关

 
   
   
 
 
  

Python相关

  
    
    
  

  

  
 
  

  
  

后台回复关键词【tidyr】获取本文代码和数据
    分享 ”和“ 在看 ”是更好的支持!