包含多個值的欄位

使用 tidyr 重塑資料

Jeroen Boeye

Head of Machine Learning, Faktion

同一欄含兩個變數

netflix_df
# A tibble: 637 x 3
   title                  type    duration
   <chr>                  <chr>   <chr>   
 1 Article 15             Movie   125 min 
 2 Kill Me If You Dare    Movie   100 min 
 3 The Spy                TV Show 1 Seasons
 4 The World We Make      Movie   108 min 
 5 Watchman               Movie   93 min
使用 tidyr 重塑資料

轉換分割後欄位的資料型別

netflix_df %>% 
  separate(duration, into = c("value", "unit"), convert = TRUE)
# A tibble: 5 x 4
  title               type    value unit  
  <chr>               <chr>   <int> <chr> 
1 Article 15          Movie     125 min   
2 Kill Me If You Dare Movie     100 min   
3 The Spy             TV Show     1 Seasons
4 The World We Make   Movie     108 min   
5 Watchman            Movie      93 min
使用 tidyr 重塑資料

dplyr 聚合複習

netflix_df %>% 
  separate(duration, into = c("value", "unit"), convert = TRUE) %>%
  group_by(type, unit) %>% 
  summarize(mean_duration = mean(value))
# A tibble: 2 x 3
# Groups:   type [2]
  type    unit    mean_duration
  <chr>   <chr>           <dbl>
1 Movie   min             98.6 
2 TV Show Seasons          1.85
使用 tidyr 重塑資料

將變數分散到多欄

含多個變數的欄位

  每個變數一欄

使用 tidyr 重塑資料

合併多欄為一欄

star_wars_df
# A tibble: 4 x 2
  given_name family_name
  <chr>      <chr>      
1 Luke       Skywalker  
2 Han        Solo       
3 Leia       Organa     
4 R2         D2
使用 tidyr 重塑資料

合併多欄為一欄

star_wars_df %>%
  unite("name", given_name, family_name)
# A tibble: 4 x 1
  name          
  <chr>         
1 Luke_Skywalker
2 Han_Solo      
3 Leia_Organa   
4 R2_D2
使用 tidyr 重塑資料

合併多欄為一欄

star_wars_df %>%
  unite("name", given_name, family_name, sep = " ")
# A tibble: 4 x 1
  name          
  <chr>         
1 Luke Skywalker
2 Han Solo      
3 Leia Organa   
4 R2 D2
使用 tidyr 重塑資料

同一儲存格含多個值

drink_df
# A tibble: 2 x 2
  drink          ingredients           
  <chr>          <chr>                 
1 Chocolate milk milk, chocolate, sugar
2 Orange juice   oranges, sugar
使用 tidyr 重塑資料

同一儲存格含多個值

Netflix 資料

含多個變數的欄位

飲料資料

同一儲存格含多個值

使用 tidyr 重塑資料

同一儲存格含多個值

Netflix 資料

含多個變數的欄位

飲料資料

同一儲存格含多個值

將值轉為變數

每個變數一欄

使用 tidyr 重塑資料

同一儲存格含多個值

Netflix 資料

含多個變數的欄位

飲料資料

同一儲存格含多個值

將值轉為變數

每個變數一欄

將值轉為觀測值

每格一個值

使用 tidyr 重塑資料

將值分散到多列

drink_df %>% 
  separate_rows(ingredients, sep = ", ")
# A tibble: 5 x 2
  drink          ingredients
  <chr>          <chr>      
1 Chocolate milk milk       
2 Chocolate milk chocolate  
3 Chocolate milk sugar      
4 Orange juice   oranges    
5 Orange juice   sugar
使用 tidyr 重塑資料

計算配料數量

drink_df %>% 
  separate_rows(ingredients, sep = ", ") %>% 
  count(drink)
# A tibble: 2 x 2
  drink              n
  <chr>          <int>
1 Chocolate milk     3
2 Orange juice       2
drink_df %>% 
  separate_rows(ingredients, sep = ", ") %>% 
  count(ingredients)
# A tibble: 4 x 2
  ingredients     n
  <chr>       <int>
1 chocolate       1
2 milk            1
3 oranges         1
4 sugar           2
使用 tidyr 重塑資料

視覺化配料

drink_df %>% 
  separate_rows(ingredients, sep = ", ") %>% 
  ggplot(aes(x=drink, fill=ingredients)) +
  geom_bar()

配料長條圖

使用 tidyr 重塑資料

一起來練習吧!

使用 tidyr 重塑資料

Preparing Video For Download...