我有一个比内存更大的箭头数据集,由 open_dataset() 从分区镶木地板文件创建,我需要在其上使用
distinct(.keep_all = TRUE)
。我需要将计算保留在磁盘上,因此我使用箭头来加快速度而不会使我的 R 会话崩溃。
我想保留 a 列和 b 列中具有不同值的行。
示例
df <- tibble(a = c(1,1,2,2),
b = c(1,1,2,1),
c = c("x", "y", "z", "a")) %>%
arrow_table()
df %>%
distinct(a, b, .keep_all = TRUE)
这会导致:
Error: distinct() with .keep_all = TRUE not supported in Arrow
所需输出
具有以下值的箭头数据集。
a b c
<dbl> <dbl> <chr>
1 1 1 x
2 2 2 z
3 2 1 a
我看到其他人也有类似的问题,但似乎没有箭头计划合并使用
.keep_all
(请参阅已关闭的问题)。
base::duplicated()
也可以工作,但也不支持箭头。关于如何在不使用 collect()
(这会导致我的 R 会话崩溃)的情况下解决此问题,有什么想法吗?蒂亚!
正如评论所述,分组
slice
操作可能会代替。
library(dplyr)
df <- tibble(a = c(1,1,2,2),
b = c(1,1,2,1),
c = c("x", "y", "z", "a"))
df %>%
group_by(a, b) %>%
slice_head(n = 1)
#> # A tibble: 3 × 3
#> # Groups: a, b [3]
#> a b c
#> <dbl> <dbl> <chr>
#> 1 1 1 x
#> 2 2 1 a
#> 3 2 2 z
创建于 2024-03-28,使用 reprex v2.1.0