如何使用R将行转换为列

3

我很新于 R,有一个类似于这样的数据集:

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

如何将标签列的行转换为数据集的列?

我需要像这样的东西:

   start start1 start2 start3  start4  start5  start6  start7
   30.0 1017.0 1527.0 1827.0 10496.0 10794.0 11270.0 12261.0
    4.1    2.6    1.7    1.1     0.9     1.1     1.4     3.1
   3011.0 3011.0 3011.0 3011.0  3011.0  3011.0  3011.0  2043.0

请考虑使用 reshape - greengrass62
3个回答

5

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

2
在tidyverse中
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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接