R基础知识统计分析方法R数据分析workshop

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

(完)

上一篇 下一篇

猜你喜欢

热点阅读