-1

I am trying to make a table from wide to long but i need to create a new column to hold the data description.

es0 es1 es2 es3
1    2  a    b
2    3  c    a
a    b  1    3

into

es0 1
es0 2
es0 a
es1 2
es1 3
es1 b
es2 a
es2 c
...

I can't seem to wrap my head around how to do this with a new column. all the methods i found while searching using gather, pivot_longer, melt, smelt... etc all needed a "key" column to flip on

sourlemonaid
  • 504
  • 2
  • 6
  • 19

1 Answers1

1

date.table

library(data.table)
DT <- fread("es0 es1 es2 es3
1    2  a    b
2    3  c    a
a    b  1    3")

melt(DT, measure.vars = names(DT))

#    variable value
# 1:      es0     1
# 2:      es0     2
# 3:      es0     a
# 4:      es1     2
# 5:      es1     3
# 6:      es1     b
# 7:      es2     a
# 8:      es2     c
# 9:      es2     1
#10:      es3     b
#11:      es3     a
#12:      es3     3

tidyverse

library(tidyverse)

mydata <- read.table(text = "es0 es1 es2 es3
1    2  a    b
2    3  c    a
a    b  1    3", header = TRUE)

mydata %>% pivot_longer(everything())
# A tibble: 12 x 2
#   name  value
#   <chr> <chr>
# 1 es0   1    
# 2 es1   2    
# 3 es2   a    
# 4 es3   b    
# 5 es0   2    
# 6 es1   3    
# 7 es2   c    
# 8 es3   a    
# 9 es0   a    
#10 es1   b    
#11 es2   1    
#12 es3   3 
Wimpel
  • 26,031
  • 1
  • 20
  • 37