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

2021-05-07  本文已影响0人  R语言数据分析指南

之前写了一系列绘图的文档来介绍如何通过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中的其它数据过滤函数

上一篇下一篇

猜你喜欢

热点阅读