美文网首页
R数据科学-2(tidyr)

R数据科学-2(tidyr)

作者: jamesjin63 | 来源:发表于2020-10-18 12:47 被阅读0次

    R数据科学-2

    是用于清洗数据的工具,如dplyr一样,其中每一列都是变量,每一行都是观察值,并且每个单元格都包含一个值。 “ tidyr”包含用于更改数据集的形状(旋转)和层次结构(嵌套和“取消嵌套”),将深度嵌套的列表转换为矩形数据框(“矩形”)以及从字符串列中提取值的工具。它还包括用于处理缺失值(隐式和显式)的工具。

    今天就介绍以下在数据清洗工作时,经常会遇到三个问题:
    `1. 宽数据变成长数据(ggplot画图常用)

    1. 长数据变成宽数据
    2. 根据值生成重复列数据
      `

    这些都是为数据画图,或者分析做准备工作。以前是reshape包的内容,当然reshape可以做,但是现在tidyr 处理起来更简洁方便,快速。易于理解。

    数据长宽转化

    创建一个数据df,然后来进行数据长宽转化实例操作。


    image.png

    宽数据转成长数据,这里使用gather函数,gathe函数涉及三个参数

    gather("key", "value", x, y, z)

    library(tidyverse)
    
    # creat data 
    df=tibble(id=c(1:3),
              Shanghai=c(2,5,3),
              Beijing=c(12,23,16),
              Guangdong=c(7,3,6))
    df
    # A tibble: 3 x 4
         id Shanghai Beijing Guangdong
      <int>    <dbl>   <dbl>     <dbl>
    1     1        2      12         7
    2     2        5      23         3
    3     3        3      16         6
    
    ## 1. long data
    df_a=df %>% gather("Name","value",-id)
    
    df_a
    # A tibble: 9 x 3
         id Name      value
      <int> <chr>     <dbl>
    1     1 Shanghai      2
    2     2 Shanghai      5
    3     3 Shanghai      3
    4     1 Beijing      12
    5     2 Beijing      23
    6     3 Beijing      16
    7     1 Guangdong     7
    8     2 Guangdong     3
    9     3 Guangdong     6
    
    ## 2. wide data
    df_a %>% spread("Name",-id)
    # A tibble: 3 x 4
         id Beijing Guangdong Shanghai
      <int>   <dbl>     <dbl>    <dbl>
    1     1      12         7        2
    2     2      23         3        5
    3     3      16         6        3
    

    宽数据转成长数据,这里使用spread函数,spread函数涉及2个参数

    df %>% spread(key, value)

    image.png

    重复列变量

    有时候会碰到,需要新增一列是重复该变量的多少次,如上述例子中,
    上海id=1的有2个,然后重复shanghai2次,5次,3次,形成新增一列。
    在tidyr中很简单的uncount函数就可以实现:
    uncount(data, weights, .remove = TRUE, .id = NULL)

    df_c=df_a %>% filter(!Name=="Beijing")
    # Methods 1
    df_c %>% uncount(value) %>% 
      rename(new=Name) 
    # Methods 2
    data.frame(new = rep(df_c$Name,df_c$value))
    
    image.png

    参考

    1. https://tidyr.tidyverse.org
    2. https://github.com/tidyverse/tidyr
    3. Manipulating, analyzing and exporting data with tidyverse

    相关文章

      网友评论

          本文标题:R数据科学-2(tidyr)

          本文链接:https://www.haomeiwen.com/subject/dfqcmktx.html