Long format vs. Wide format

Wide -> Long

df <- data.frame(
  col1 = rep(1:5, each=2),
  col2 = 1:10,
  col3 = 11:20,
  col4 = 21:30
); df
##    col1 col2 col3 col4
## 1     1    1   11   21
## 2     1    2   12   22
## 3     2    3   13   23
## 4     2    4   14   24
## 5     3    5   15   25
## 6     3    6   16   26
## 7     4    7   17   27
## 8     4    8   18   28
## 9     5    9   19   29
## 10    5   10   20   30
df_mod1 <- reshape2::melt(df, id.vars='col1', 
                  measure.vars=c('col2', 'col3', 'col4')); df_mod1
##    col1 variable value
## 1     1     col2     1
## 2     1     col2     2
## 3     2     col2     3
## 4     2     col2     4
## 5     3     col2     5
## 6     3     col2     6
## 7     4     col2     7
## 8     4     col2     8
## 9     5     col2     9
## 10    5     col2    10
## 11    1     col3    11
## 12    1     col3    12
## 13    2     col3    13
## 14    2     col3    14
## 15    3     col3    15
## 16    3     col3    16
## 17    4     col3    17
## 18    4     col3    18
## 19    5     col3    19
## 20    5     col3    20
## 21    1     col4    21
## 22    1     col4    22
## 23    2     col4    23
## 24    2     col4    24
## 25    3     col4    25
## 26    3     col4    26
## 27    4     col4    27
## 28    4     col4    28
## 29    5     col4    29
## 30    5     col4    30
df_mod2 <- df %>% 
  gather("col2", "col3", "col4", key = cols, value = value); df_mod2
##    col1 cols value
## 1     1 col2     1
## 2     1 col2     2
## 3     2 col2     3
## 4     2 col2     4
## 5     3 col2     5
## 6     3 col2     6
## 7     4 col2     7
## 8     4 col2     8
## 9     5 col2     9
## 10    5 col2    10
## 11    1 col3    11
## 12    1 col3    12
## 13    2 col3    13
## 14    2 col3    14
## 15    3 col3    15
## 16    3 col3    16
## 17    4 col3    17
## 18    4 col3    18
## 19    5 col3    19
## 20    5 col3    20
## 21    1 col4    21
## 22    1 col4    22
## 23    2 col4    23
## 24    2 col4    24
## 25    3 col4    25
## 26    3 col4    26
## 27    4 col4    27
## 28    4 col4    28
## 29    5 col4    29
## 30    5 col4    30
df_mod3 <- df %>% 
  pivot_longer(cols = c("col2", "col3", "col4"), names_to = "cols", values_to = "value") %>% 
  arrange(cols); df_mod3
## # A tibble: 30 x 3
##     col1 cols  value
##    <int> <chr> <int>
##  1     1 col2      1
##  2     1 col2      2
##  3     2 col2      3
##  4     2 col2      4
##  5     3 col2      5
##  6     3 col2      6
##  7     4 col2      7
##  8     4 col2      8
##  9     5 col2      9
## 10     5 col2     10
## # ... with 20 more rows

Long -> Wide

col1 variable value

reshape2::dcast(data = df_mod1, formula = col1 ~ variable, sum, value.var = "value")
##   col1 col2 col3 col4
## 1    1    3   23   43
## 2    2    7   27   47
## 3    3   11   31   51
## 4    4   15   35   55
## 5    5   19   39   59
df_mod3 %>% spread( key = cols, value = value)

spread()는 데이터 중복으로 인해 error 발생

df_mod3 %>% 
  pivot_wider(names_from = cols, values_from = value, values_fn = list) %>% 
  unnest(cols = everything())
## # A tibble: 10 x 4
##     col1  col2  col3  col4
##    <int> <int> <int> <int>
##  1     1     1    11    21
##  2     1     2    12    22
##  3     2     3    13    23
##  4     2     4    14    24
##  5     3     5    15    25
##  6     3     6    16    26
##  7     4     7    17    27
##  8     4     8    18    28
##  9     5     9    19    29
## 10     5    10    20    30