R:在 reshape2 中排序行

R: ordering rows in reshape2

我有一种情况需要使用 R 中的 reshape2melt 数据。

melt(head(faithful), measure.vars = names(faithful))

这给出了输出:

    variable  value
1  eruptions  3.600
2  eruptions  1.800
...
7    waiting 79.000
8    waiting 54.000
...

我想根据数据框中的列来命令输出具有前几行。例如:

    variable  value
1  eruptions  3.600
2    waiting 79.000
3  eruptions  1.800
4    waiting 54.000
...

如何通过避免循环来实现这一点。

我会使用一个额外的列tag

df<-faithful
df<-cbind(df,tag=1:nrow(faithful))
df2<-melt(df,id.vars = "tag")
df2<-df2[order(df2$tag),]
df2$tag<-NULL#drop it like it's hot
head(df2)

因此:

     variable  value
1   eruptions  3.600
273   waiting 79.000
2   eruptions  1.800
274   waiting 54.000
3   eruptions  3.333
275   waiting 74.000

我知道有人要求 reshape2 解决方案,但另一个好方法是使用 tidyverse.

library(tidyverse)
head(faithful) %>% mutate(tag = 1:n()) %>% gather(var, val, -tag) %>% arrange(tag)

   tag       var    val
1    1 eruptions  3.600
2    1   waiting 79.000
3    2 eruptions  1.800
4    2   waiting 54.000
# etc

不需要中间对象。