R语言 数据清理
下面是四个重要的数据清理函数:
- gather(): 将数据从宽转换为长
- spread(): 将数据从长转换为宽
- separate(): 将一个变量分成两个
- unit(): 第二单元变量化为一
我们用tidyr库。该库属于用于操作、清理和可视化数据的库集。如果你是用anaconda安装的R,那么该库已经安装好了。库的链接:
https://anaconda.org/r/r-tidyr
如果没安装,则输入以下命令进行安装:
install.packages("tidyr")
gather()
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
结果:
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
结果:
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
在gather()函数中,我们创建了两个新的变量quarter和growth,因为原始数据集只有一个组变量:即country和键值对。
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()函数的作用是:根据分隔符将列拆分为两列。这个函数在变量为日期的某些情况下很有用。我们的分析可能需要关注月和年,我们希望将列分离为两个新变量。
语法
separate(data, col, into, sep= "", remove = TRUE)
参数 | 描述 |
---|---|
data | 用于重新定义数据集的数据帧。 |
col | 要分割的列。 |
into | 新变量的名称 |
sep | 指示用于分隔变量的符号,即: "-", "_", "&" |
remove | 删除旧列。默认设置为TRUE。 |
通过应用separate()函数,我们可以在更整洁的数据集中将季度与年度分开。
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()函数的作用是:将两列合并为一列。
语法
unit(data, col, conc ,sep= "", remove = TRUE)
参数 | 描述 |
---|---|
data | 用于重新定义数据集的数据帧。 |
col | 新列的名称 |
conc | 要连接的列的名称 |
sep | 表示将变量统一的符号。即:“-”、“_”、“&” |
remove | 删除旧的列。默认情况下,设置为TRUE |
在上面的例子中,我们将季度与年度分开。如果我们想合并它们呢?我们使用以下代码:
unit_tidier <- separate_tidier %>%
unite(Quarter, Qrt, year, sep ="_")
head(unit_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

关注公众号,获取一手资讯
“ R语言 数据清理 ” comments 0