为什么 dplyr arrangement 不订购我的数据框?

why is dplyr arrange not ordering my dataframe?

我有以下数据框

> S
Source: local data frame [1,991 x 3]
Groups: exp

   exp year commval
1  alb 1995     186
2  alb 1997     232
3  alb 1998     244
4  alb 2000     251
5  alb 1996     275
6  alb 1999     290
7  alb 2001     313
8  alb 2002     358
9  alb 2003     471
10 alb 2004     608
.. ...  ...     ...

我想过滤 year == 1995 而不是在 commval 上重新排序:

> S %>% filter(year == 1995) %>% arrange(commval)
Source: local data frame [130 x 3]
Groups: exp

   exp year commval
1  alb 1995     186
2  are 1995   20266
3  arg 1995   21178
4  arm 1995      60
5  aus 1995   49855
6  aut 1995   50115
7  aze 1995     102
8  bel 1995  150850
9  ben 1995     182
10 bfa 1995     231
.. ...  ...     ...

如您所见,结果不是按 commval 排序,而是按 exp 排序。我在这里做错了什么?

关于 conflicts() 和 sessionInfo() 的更多信息:

> conflicts()
[1] "filter"    "body<-"    "intersect" "kronecker" "setdiff"   "setequal"  "union"    

> sessionInfo()
R version 3.1.2 (2014-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] dplyr_0.3.0.2  igraph_0.7.1   reshape2_1.4.1

loaded via a namespace (and not attached):
[1] assertthat_0.1  DBI_0.3.1       lazyeval_0.1.10 magrittr_1.5    parallel_3.1.2  plyr_1.8.1     
[7] Rcpp_0.11.3     stringr_0.6.2   tools_3.1.2 

来自输出

Source: local data frame [1,991 x 3]
Groups: exp

我们可以看到您的数据按 exp 分组。这意味着当你安排时,你将与小组一起安排。如果这不是您想要的,请执行

S %>% filter(year == 1995) %>% ungroup() %>% arrange(commval)

在排列前取消分组数据

arrange 对分组数据的行为在不同版本的 dplyr 中发生了几次变化。从 0.7 版(2017 年 9 月)开始,默认情况下 arrange 而不是 按组排序,因此

data %>% group_by(grp) %>% arrange(x)

将按 x 排序,而不考虑 grp(这实际上使原始问题没有实际意义)。

要更改此设置,请在对 arrange:

的调用中指定 .by_group=TRUE
data %>% group_by(grp) %>% arrange(x, .by_group=TRUE)

这将按 grp 排序,然后在每个 grp 中按 x 排序。