R数据科学 数据清洗透视-1 相关函数 gather(), sp
2020-08-31 本文已影响0人
天地本无心
R数据科学最直接,也最让人感到兴奋的过程就是数据可视化,但是能够直接用来进行可视化的数据少之又少,实际分析中基本碰不到,所以就需要对数据进行数据清洗过程。
在R中,我们最常见的数据类型就是数据框。对于数据框而言,每一列就是一个变量(variable),每一行就是一个观测(observation),而每个单元格的值,就是观测值(values)。
Fig1: Adapted from book of Hadley Wickham我们可以通过一个例子来直观地感受一下。
attach(iris)
mini_iris <- iris[c(1,51,101),]
mini_iris
> mini_iris
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
51 7.0 3.2 4.7 1.4 versicolor
101 6.3 3.3 6.0 2.5 virginica
其中花萼长度,花萼宽度,花瓣长度,花瓣宽度,以及品质都是变量(vairable)名,序号1,51,101代表的是三条观测记录,单元格里代表的是每一个观测值。
这个时候,我们需要将行名拆除,并且把行名塞进列里面,单元格的数字也变成一个新列,并且每一行只有一个观测值。我们需要怎样操作呢?
这时候就可以用到gather()函数。
> gather(mini_iris, key = "flower_attr",value = "attr_value", Sepal.Length, Sepal.Width, Petal.Length, Petal.Width)
#如果要变换的variable实在是太多,无法一一指定,可以通过“-”反选一些不需要的列。
> gather(mini_iris, key = "flower_attr",value = "attr_value", -Species)
都会得到如下结果
Species flower_attr attr_value
1 setosa Sepal.Length 5.1
2 versicolor Sepal.Length 7.0
3 virginica Sepal.Length 6.3
4 setosa Sepal.Width 3.5
5 versicolor Sepal.Width 3.2
6 virginica Sepal.Width 3.3
7 setosa Petal.Length 1.4
8 versicolor Petal.Length 4.7
9 virginica Petal.Length 6.0
10 setosa Petal.Width 0.2
11 versicolor Petal.Width 1.4
12 virginica Petal.Width 2.5
而spread()函数的功能正好相反。是将行里面的数据又还到列里面去。
attach(iris)
mini_iris <- iris[c(1,51,101),]
flatted_data <- gather(mini_iris, key = "flower_attr",value = "attr_value", -Species)
spread(flatted_data, flower_attr)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
51 7.0 3.2 4.7 1.4 versicolor
101 6.3 3.3 6.0 2.5 virginica
(完)