R:在reshape2中排序行

时间:2017-05-18 14:44:16

标签: r reshape2 melt

我有一种情况需要使用R中的 reshape2 包来融化数据。

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
...

我想根据dataframe中的列命令输出包含前几行。例如:

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

如何通过避免循环实现这一目标。

2 个答案:

答案 0 :(得分:3)

我会使用额外的列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)

Ergo:

     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

答案 1 :(得分:2)

我知道要求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

不需要中间对象。