R中有什么方法可以将列转换为保留列名称的行?

输入示例:

A   B
1   1
2   3
3   4
44  5

输出
 Group Number
  A       1
  A       2
  A       3
  A       44
  B       1
  B       3
  B       4
  B       5

最佳答案

我使用reshape2

> x <- data.frame(A = 1:5, B = 55:51)
> library(reshape2)
> melt(x)
Using  as id variables
   variable value
1         A     1
2         A     2
3         A     3
4         A     4
5         A     5
6         B    55
7         B    54
8         B    53
9         B    52
10        B    51

看到基准很有趣。 melt默认情况下会打印一条消息,可以通过在调用函数时更明确地将其关闭。
> microbenchmark(stack(DF), melt(DF), times=100)
    Unit: milliseconds
          expr      min       lq   median       uq      max neval
     stack(DF) 122.3086 133.8435 139.6990 180.5338 250.9316   100
      melt(DF) 140.0183 198.2025 227.8125 245.3444 367.1552   100

我发现差异很小,当关闭melt的打印时,差异会变小。看起来我在模拟中关闭详细模式的预感可能有所帮助。
> microbenchmark(stack(DF), melt(DF, measure.vars = names(DF)[grepl("X", names(DF))]), times=100)
Unit: milliseconds
                                                      expr      min       lq   median       uq      max neval
                                                 stack(DF) 94.33681 124.9958 132.1747 144.7323 287.7438   100
 melt(DF, measure.vars = names(DF)[grepl("X", names(DF))]) 99.44282 141.0594 150.2625 178.8081 249.0888   100

10-06 00:38