我观察到slice在某些情况下使用时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)
Run Code Online (Sandbox Code Playgroud)
给
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
Run Code Online (Sandbox Code Playgroud)
和
tmp_df2 %>%
group_by(a) %>%
filter(row_number() == 1)
Run Code Online (Sandbox Code Playgroud)
给
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
Run Code Online (Sandbox Code Playgroud)
看起来像slice按分组变量的升序对输出重新排序。但是,文档建议slice和过滤器应该以相同的方式运行,特别是从?slice(强调我的):
Slice 不适用于关系数据库,因为它们没有行顺序的内在概念。如果要执行等效操作,请使用 filter() 和 row_number()。
查看代码,slice()通过迭代组来工作,因此其输出将采用组排序形式。我怀疑它比同等filter方法更有效,这就是它实际存在的原因 - 否则它的包含没有任何好处。
我本来可以将此作为评论,但我没有足够的代表 - 所以如果我错了,请温柔地投下反对票
| 归档时间: |
|
| 查看次数: |
508 次 |
| 最近记录: |