箭头中的distinct(.keep_all = TRUE)的替代品?

问题描述 投票:0回答:1

我有一个比内存更大的箭头数据集,由 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 会话崩溃)的情况下解决此问题,有什么想法吗?蒂亚!

r dplyr apache-arrow
1个回答
0
投票

正如评论所述,分组

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

© www.soinside.com 2019 - 2024. All rights reserved.