专栏名称: 爱数据原统计网
中国统计网(www.itongji.cn),国内最大的数据分析门户网站。提供数据分析行业资讯,统计百科知识、数据分析、商业智能(BI)、数据挖掘技术,Excel、SPSS、SAS、R等数据分析软件等在线学习平台。
目录
相关文章推荐
51好读  ›  专栏  ›  爱数据原统计网

教你使用tidyr包进行数据预处理

爱数据原统计网  · 公众号  · BI  · 2017-01-31 17:06

正文


今天跟大家介绍一下tidyr包。


tidyr包中主要涉及:


1) 缺失值的简单补齐


2) 长形表变宽形表与宽形表变长形表


3) 列分割与列合并



01

缺失值的简单补齐


library(tidyr)

library(dplyr)


#创建含有缺失值的数据框示例

x

y

df

df



下面用x的均值或中位数替换缺失值,用y的众数替换缺失值。


#计算x的均值和中位数

x_mean

x_median

#计算y的众数

y_mode


#替换数据框df中x和y的缺失值

df2

df2



df3

df3



上面的缺失值补齐方法只是简单的使用指定值(可以是均值、中位数、众数等),如果还想了解多重插补方法实现缺失值的处理,可以参考:

缺失值处理方法


02

长形表变宽形表与宽形表变长形表


这里简单介绍一下何为长形表和宽形表,简单的说,长形表就是一个观测对象可由多行组成,而宽形表则是一个观测仅由一行组成。例如:


#长形表

name

product

price

df_long

df_long



#宽形表

name

gender

province

age

df_wide

df_wide




有时, 为了满足建模或绘图的要求,往往需要将长形表转换为宽形表,或将宽形表变为长形表。 下面所要讲的是,如何实现这两种数据表类型的转换。


使用 spread()函数实现长表转宽表 ,语法如下:


spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE)


data: 为需要转换的长形表

key: 需要将变量值拓展为字段的变量

value: 需要分散的值

fill: 对于缺失值,可将fill的值赋值给被转型后的缺失值


举例说明:

df_long_expand

df_long_expand



被转型后的 数据框中存在缺失值 ,如果想给缺失值传递一个指定值的话, 就需要fill参数的作用。


df_long_expand2

df_long_expand2


使用gather()函数实现宽表转长表 ,语法如下:


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

data: 需要被转换的宽形表

key: 将原数据框中的所有列赋给一个新变量key

value: 将原数据框中的所有值赋给一个新变量value

...: 可以指定哪些列聚到一列中

na.rm: 是否删除缺失值


举例说明:


#默认将所有列存放到key中

df_wide_gather

df_wide_gather



#指定需要被聚为一列的字段

df_wide_gather2

df_wide_gather2



#df_wide_gather2的结果也可以写成

df_wide_gather3

df_wide_gather3



03

列分割与列合并


separate()函数可将一列拆分为多列,一般可用于日志数据或日期时间型数据的拆分 ,语法如下:


separate(data, col, into, sep = "[^[:alnum:]]+", remove = TRUE,

convert = FALSE, extra = "warn", fill = "warn", ...)

data: 为数据框

col: 需要被拆分的列

into: 新建的列名,为字符串向量

sep: 被拆分列的分隔符

remove: 是否删除被分割的列


举例说明:


id

datetime

df

df



下面使用separate()函数将日期时间值分割为年、月、日、时、分、秒


#将日期时间数据切割为日期和时间两列

separate1 % separate(., col = datetime, into = c('date', 'time'), sep = ' ', remove = FALSE)

separate1








请到「今天看啥」查看全文