R:将多列堆叠成单列,同时将列名保留在行中

R: stack multiple columns into single column while keeping column names in rows

假设我有以下 data.frame (df):

c1 <- c(1,2,3,4);c2 <- c(5,6,7,8);c3 <- c(9,10,11,12)
df <- data.frame(c1, c2,c3)
#   c1 c2 c3
# 1  1  5  9
# 2  2  6 10
# 3  3  7 11
# 4  4  8 12

我想将每个 df 的列堆叠在一个列中,但将每个列的标识符保留在一个新变量 (id) 中。

values <- c(c1,c2,c3)
wanted <- as.data.frame(values  )
wanted$id <- c(rep("c1", 4),rep("c2", 4),rep("c3", 4)) 
#    values id
# 1       1 c1
# 2       2 c1
# 3       3 c1
# 4       4 c1
# 5       5 c2
# 6       6 c2
# 7       7 c2
# 8       8 c2
# 9       9 c3
# 10     10 c3
# 11     11 c3
# 12     12 c3

我们可以使用stack

> stack(df)
   values ind
1       1  c1
2       2  c1
3       3  c1
4       4  c1
5       5  c2
6       6  c2
7       7  c2
8       8  c2
9       9  c3
10     10  c3
11     11  c3
12     12  c3