我正在观察当使用group_by时,切片会在某些情况下更改行的顺序.
tmp_df2 <- data.frame(a = c(1, 3, 2, 4), b = c(1, 2, 3, 4))
tmp_df2 %>%
group_by(a) %>%
slice(1)
给
Source: local data frame [4 x 2]
Groups: a [4]
a b
<dbl> <dbl>
1 1 1
2 2 3
3 3 2
4 4 4
和
tmp_df2 %>%
group_by(a) %>%
filter(row_number() == 1)
给
Source: local data frame [4 x 2]
Groups: a [4]
a b
<dbl> <dbl>
1 1 1
2 3 2
3 2 3
4 4 4
它看起来像切片重新排序输出按分组变量的升序排列.但是,文档建议切片和过滤器应该以相同的方式运行,特别是来自?slice(强调我的):
Slice does not work with relational databases because they have no intrinsic notion of row order. If you want to perform the equivalent operation, use filter() and row_number().
最佳答案 查看代码,slice()通过迭代组来工作,因此它的输出将是组排序形式.我怀疑它比等效过滤器方法更有效,这就是为什么它实际存在 – 否则它的包含没有任何好处.
我会留下这个作为评论,但我没有足够的代表 – 所以如果我错了就要温和地进行投票