R:将多列堆叠成一列,同时将列名保留在行中 [duplicate]

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

提问人:Álvaro A. Gutiérrez-Vargas 提问时间:1/12/2022 更新时间:1/12/2022 访问量:976

问:

假设我有以下 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

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

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
R DataFrame 重塑 数据操作

评论

1赞 TarJae 1/12/2022
library(tidyr) pivot_longer(df, cols=everything())

答:

3赞 ThomasIsCoding 1/12/2022 #1

我们可以使用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