【发布时间】:2018-04-09 10:07:52
【问题描述】:
当我将列从宽格式收集到长格式时,我试图保持它们的顺序。我遇到的问题是在我gather 和summarize 之后订单丢失了。列的数量很大,所以我不想手动输入顺序。
这是一个例子:
library(tidyr)
library(dplyr)
N <- 4
df <- data.frame(sample = c(1,1,2,2),
y1.1 = rnorm(N), y2.1 = rnorm(N), y10.1 = rnorm(N))
> df
sample y1.1 y2.1 y10.1
1 1 1.040938 0.8851727 -0.3617224
2 1 1.175879 1.0009824 -1.1352406
3 2 -1.501832 0.3446469 -1.8687008
4 2 -1.326817 0.4434628 -0.8795962
我想要的是保留列的顺序。在我进行一些操作后,订单丢失了。在这里看到:
dfg <- df %>%
gather(key="key", value="value", -sample) %>%
group_by(sample, key) %>%
summarize(mean = mean(value))
> filter(dfg, sample == 1)
sample key mean
<dbl> <chr> <dbl>
1 1 y1.1 0.2936335
2 1 y10.1 0.6170505
3 1 y2.1 -0.2250543
您可以看到它是如何将 y10.1 置于 y2.1 之前的,这是我不想要的。我想要的是保持这个顺序,在这里看到:
dfg <- df %>%
gather(key="key", value="value", -sample)
> filter(dfg, sample == 1)
sample key value
1 1 y1.1 0.60171521
2 1 y1.1 -0.01444823
3 1 y2.1 0.81566726
4 1 y2.1 -1.26577581
5 1 y10.1 0.41686388
6 1 y10.1 0.81723707
由于某种原因,group_by 和 summarize 操作改变了顺序。我不确定为什么。我尝试了ungroup 命令,但没有任何作用。正如我之前所说,我的实际数据框有很多列,我需要保留顺序。保留顺序的原因是我可以按正确的顺序绘制数据。
有什么想法吗?
【问题讨论】: