How to transform row in column using R

Viewed 53

I'm new to R e have a data set similar to this:

df <- data.frame(x = c(30, 1017, 1527, 1827,10496, 10794, 11270, 12261),
                 y = c(4.1, 2.6, 1.7, 1.1, 0.9, 1.1, 1.4, 3.1),
                 cod = c(3011, 3011, 3011, 3011, 3011, 3011, 3011, 2043),
                 label = c('start', 'start1', 'start2', 'start3', 'start4', 'start5', 'start6', 'start7'))

df

      x   y  cod  label
1    30 4.1 3011  start
2  1017 2.6 3011 start1
3  1527 1.7 3011 start2
4  1827 1.1 3011 start3
5 10496 0.9 3011 start4
6 10794 1.1 3011 start5
7 11270 1.4 3011 start6
8 12261 3.1 2043 start7

How do I transform the rows of the label column into columns of the dataset?

I would need something like:

   start start1 start2 start3  start4  start5  start6  start7
   30.0 1017.0 1527.0 1827.0 10496.0 10794.0 11270.0 12261.0
    4.1    2.6    1.7    1.1     0.9     1.1     1.4     3.1
   3011.0 3011.0 3011.0 3011.0  3011.0  3011.0  3011.0  2043.0
3 Answers

We can use data.table::transpose

data.table::transpose(df, make.names = 'label')
#     start start1 start2 start3  start4  start5  start6  start7
#1   30.0 1017.0 1527.0 1827.0 10496.0 10794.0 11270.0 12261.0
#2    4.1    2.6    1.7    1.1     0.9     1.1     1.4     3.1
#3 3011.0 3011.0 3011.0 3011.0  3011.0  3011.0  3011.0  2043.0

In the tidyverse

df %>% 
  gather(key = "x.y.cod", value = "scratch", "x", "y", "cod") %>% 
  spread(label, value = scratch)

  x.y.cod  start start1 start2 start3  start4  start5  start6  start7
1     cod 3011.0 3011.0 3011.0 3011.0  3011.0  3011.0  3011.0  2043.0
2       x   30.0 1017.0 1527.0 1827.0 10496.0 10794.0 11270.0 12261.0
3       y    4.1    2.6    1.7    1.1     0.9     1.1     1.4     3.1

Using data.table's melt/dcast

library(data.table)
dcast(melt(setDT(df), id.vars = 'label'), variable~label, value.var = 'value')

#   variable  start start1 start2 start3  start4  start5  start6  start7
#1:        x   30.0 1017.0 1527.0 1827.0 10496.0 10794.0 11270.0 12261.0
#2:        y    4.1    2.6    1.7    1.1     0.9     1.1     1.4     3.1
#3:      cod 3011.0 3011.0 3011.0 3011.0  3011.0  3011.0  3011.0  2043.0
Related