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