美文网首页
R语言基础入门(1) 宽表转长表

R语言基础入门(1) 宽表转长表

作者: R语言数据分析指南 | 来源:发表于2021-05-07 22:12 被阅读0次

    之前写了一系列绘图的文档来介绍如何通过ggplot2来绘图,但是对于初学者来说不够友好,因此这一系列将从最基础的一下东西开始写起,希望对大家有所帮助。在此之前请阅读以下2篇文档
    https://mp.weixin.qq.com/s/QCSA06xePLJgJ8RyeATQxg
    https://mp.weixin.qq.com/s/EwFO7V8o5eO-dTrhJzSh_w

    通过上面2篇文档的学习,相应您已经了解了如何安装R包,设置路径及ggplot2的一些关键概念,下面就该读入自己的数据来进行可视化了;在画图之前我们还需要对数据进行格式处理,是否还记得在ggplot2可视化时需要给aes传入2个美学参数,一个作为X另一个为Y,但是我们通常手里边的数据有很多列,在R中将其定义为宽表,而ggplot函数需要的在R中我们定义为长表,因此第一步即:

    宽表转长表

    如下图所示

    下面我们创建数据集来演示一下

    df <- data.frame(state = c("Maine", "Massachusetts", 
                         "New Hampshire", "Vermont"),
               male_fulltime = c(50329,66066, 59962, 50530), 
               male_other = c(18099, 18574, 20274, 17709), 
               female_fulltime = c(40054, 53841, 46178, 42198),
               female_other = c(13781, 14981, 15121, 14422))
    
    df
    
    > df
              state male_fulltime male_other female_fulltime female_other
    1         Maine         50329      18099           40054        13781
    2 Massachusetts         66066      18574           53841        14981
    3 New Hampshire         59962      20274           46178        15121
    4       Vermont         50530      17709           42198        14422
    

    宽表转长表

    df2.long <- pivot_longer(df,cols = -state, 
                             names_to = c("sex","work"), 
                             names_sep = "_", 
                             values_to = "income")
    df2.long
    
    > df2.long
    # A tibble: 16 x 4
       state         sex    work     income
       <chr>         <chr>  <chr>     <dbl>
     1 Maine         male   fulltime  50329
     2 Maine         male   other     18099
     3 Maine         female fulltime  40054
     4 Maine         female other     13781
    

    可以看到通过pivot_longer( )函数很轻松完成了宽表转长表

    • pivot_longer()函数有三个主要的参数
    • cols,表示哪些列需要转换
    • names_to,表示cols选取的这些列的名字,构成了新的一列或多列;需要给定名称
    • values_to,表示cols选取的这些列的值,构成了新的一列,同样要给定名称

    经过上面的格式转换我们整理好了数据,接下来进行一个简单的可视化

    df2.long %>% ggplot(aes(sex,income,fill=state))+
      geom_boxplot()+theme_classic()
    

    在某些时刻我们可能还需要进行长表转宽表,让我们通过下面的代码来学习

    pivot_wider(df2.long, 
                names_from = c(sex,work), 
                values_from = income,
                names_sep = ".")
    
    # A tibble: 4 x 5
      state         male.fulltime male.other female.fulltime female.other
      <chr>                 <dbl>      <dbl>           <dbl>        <dbl>
    1 Maine                 50329      18099           40054        13781
    2 Massachusetts         66066      18574           53841        14981
    3 New Hampshire         59962      20274           46178        15121
    4 Vermont               50530      17709           42198        14422
    

    经过本节我们初步了解了数据格式的转换,接下来的将继续介绍tidyverse中的其它数据过滤函数

    相关文章

      网友评论

          本文标题:R语言基础入门(1) 宽表转长表

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