Data Cleaning functions
以下是整理数据的四个常用的函数:
gather(): 将数据从横向转换为纵向(不是装置)
spread(): 将数据从纵向转换为横向
separate(): 将一个变量分解为两个变量
unit(): 将两个变量合并为一个变量
如果没有安装tidyr,输入以下命令进行安装
install.packages("tidyr")
gather()
gather(data, key, value, na.rm = FALSE) 参数: -data: 数据集 -key: 新创建列的名称 -value: 选择用来填充关键列的列 -na.rm: 删除缺失的值. 默认为FALSE
如图,我们想要创建一个名为growth的列,由quarter变量的值填充。
library(tidyr) #生成示例数据 messy <- data.frame( country = c("A", "B", "C"), q1_2017 = c(0.03, 0.05, 0.01), q2_2017 = c(0.05, 0.07, 0.02), q3_2017 = c(0.04, 0.05, 0.01), q4_2017 = c(0.03, 0.02, 0.04)) messy
> messy country q1_2017 q2_2017 q3_2017 q4_2017 1 A 0.03 0.05 0.04 0.03 2 B 0.05 0.07 0.05 0.02 3 C 0.01 0.02 0.01 0.04
#整理数据 tidier <-messy %>% #管道符可以让代码更简洁 gather(quarter, growth, q1_2017:q4_2017) tidier
> tidier country quarter growth 1 A q1_2017 0.03 2 B q1_2017 0.05 3 C q1_2017 0.01 4 A q2_2017 0.05 5 B q2_2017 0.07 6 C q2_2017 0.02 7 A q3_2017 0.04 8 B q3_2017 0.05 9 C q3_2017 0.01 10 A q4_2017 0.03 11 B q4_2017 0.02 12 C q4_2017 0.04
spread()
spread() 的作用和gather正好相反.
spread(data, key, value) 参数: data: 数据集 key: 需要变成横向的列 value: 填充新列的行
我们可以使用spread()将整洁的数据集重塑为凌乱的。
# 重塑数据 messy_1 <- tidier %>% spread(quarter, growth) messy_1
## country q1_2017 q2_2017 q3_2017 q4_2017 ## 1 A 0.03 0.05 0.04 0.03 ## 2 B 0.05 0.07 0.05 0.02 ## 3 C 0.01 0.02 0.01 0.04
separate()
separate()的作用是:根据分隔符将一列分成两列。比如,我们的分析需要关注月和年,我们就可以把这个列分成两个新变量。
Syntax:
separate(data, col, into, sep= "", remove = TRUE) 参数: -data: 数据集 -col: 需要分隔的列 -into: 新变量的名称 -sep: 用于分隔变量的符号,i.e.: "-", "_", "&" -remove: 删除旧列. 默认为TRUE.
separate_tidier <-tidier %>% separate(quarter, c("Qrt", "year"), sep ="_") head(separate_tidier)
## country Qrt year growth ## 1 A q1 2017 0.03 ## 2 B q1 2017 0.05 ## 3 C q1 2017 0.01 ## 4 A q2 2017 0.05 ## 5 B q2 2017 0.07 ## 6 C q2 2017 0.02
unite()
unite() 则是将两列合并为一列。
Syntax:
unit(data, col, conc ,sep= "", remove = TRUE) 参数: -data: 数据集 -col: 新列的名称 -conc: 需要合并的列明 -sep: 用于连接变量的符号, i.e: "-", "_", "&" -remove: 删除旧列. 默认为TRUE.
unit_tidier <- separate_tidier %>% unite(Quarter, Qrt, year, sep ="_") head(unit_tidier)
output:
## country Quarter growth ## 1 A q1_2017 0.03 ## 2 B q1_2017 0.05 ## 3 C q1_2017 0.01 ## 4 A q2_2017 0.05 ## 5 B q2_2017 0.07 ## 6 C q2_2017 0.02
Summary