R:在 reshape2 中排序行
R: ordering rows in reshape2
我有一种情况需要使用 R 中的 reshape2 包 melt 数据。
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
不需要中间对象。
我有一种情况需要使用 R 中的 reshape2 包 melt 数据。
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
不需要中间对象。