R语言 | 数据操作tidyr包
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
将上图的table4a从左侧形态转为右侧形态,
library(tidyr)
gather(table4a, key="year", value="cases", '1999', '2000')
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
将上图的table2从左侧形态转为右侧形态
spread(table2, key=type, value=count)
处理缺失值
-
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(1, NA, NA, 3, NA))
x
drop_na(x, x2)
fill()
tidyr::fill(data, ..., direction=c("down", "up")) 将数据中的缺失值进行填充(填充的值是缺失值附近的数值)
fill(x, x2)
replace_na()
tidyr::replace_na(data, replace=list(), ...) 将数据中的缺失值替换为别的值
replace_na(x, list(x2=2))
分割数据
分割数据(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(1999, 2000), time=3),
rate=c("0.7k/19m", "2k/20m", "37k/172m", "80k/174m", "212k/1t", "213k/1t")
)
table3
将上图的table3从左侧形态转为右侧形态
separate(table3, col=rate, into=c("cases", "pop"), sep="/")
separate_rows()
tidyr::separate_rows(data, ..., sep)
-
data 原始数据 -
... 待分数据所在的列(字段、变量) -
sep 分割数据时使用的风格符
将上图的table3从左侧形态转为右侧形态
separate_rows(table3, rate, sep='/')
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
将上图的table5从左侧形态转为右侧形态
unite(table5, col="year", century, year, sep="")
R语言相关
Python相关
后台回复关键词【tidyr】获取本文代码和数据