użyć 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
Ciekawie było zobaczyć benchmarki. melt
domyślnie drukuje wiadomość, którą możemy wyłączyć, wyraźnie mówiąc podczas wywoływania funkcji.
> 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
znajdę różnica niewielka, a to staje się mniejsza w przypadku drukowania na melt
jest wyłączony. Wygląda na to, że moje przeczenie wyłączania trybu verbose w moich symulacjach mogło pomóc.
> 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
terminy wyszukiwania Co cię mieć próbował przed pytaniem tutaj? – Roland
Słowa Buzz do wyszukiwania to "topienie", "rzut", "zmiana kształtu", "szeroki" i "długi". –