今天跟大家介绍一下tidyr包。
tidyr包中主要涉及:
1)
缺失值的简单补齐
2)
长形表变宽形表与宽形表变长形表
3)
列分割与列合并
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
上面的缺失值补齐方法只是简单的使用指定值(可以是均值、中位数、众数等),如果还想了解多重插补方法实现缺失值的处理,可以参考:
缺失值处理方法
这里简单介绍一下何为长形表和宽形表,简单的说,长形表就是一个观测对象可由多行组成,而宽形表则是一个观测仅由一行组成。例如:
#长形表
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
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