如何使用R转换列中的行

如何使用R转换列中的行,r,data-analysis,R,Data Analysis,我是新来的,我有一个类似的数据集: 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), l

我是新来的,我有一个类似的数据集:

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

我们可以使用
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
在整洁的房间里

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

使用
data.table
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

考虑<代码>整形<代码>
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