pivot_longer 或另一种将数据从宽数据转换为长数据的方法,并使用新列来保存键

pivot_longer or another method to convert data from wide to long with a new column to hold the key

我正在尝试 table 从宽到长,但我需要创建一个新列来保存数据描述。

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

进入

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

我似乎想不通如何在新专栏中做到这一点。我在使用 gather、pivot_longer、melt、smelt... 等搜索时发现的所有方法都需要一个“关键”列来打开

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