R数据科学-2(tidyr)

2020-10-18  本文已影响0人  jamesjin63

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
上一篇下一篇

猜你喜欢

热点阅读