为什么 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
排序。
我有以下数据框
> 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
排序。