【问题标题】:R/arrow summarizing on variable columnsR/箭头总结变量列
【发布时间】:2022-11-05 00:14:05
【问题描述】:

我有一个很大的镶木地板文件,我通过arrow::open_dataset 引用。我想获得最大值一个或多个列中,我不知道先验哪些(或多少)列。一般来说,这听起来像“使用 dplyr 编程”(假设 arrow-10 及其最近对dplyr::across 的支持),但我无法让它工作。

write_parquet(data.frame(a=c(1,9), b=c(2,10), d=c("q","r")), "quux.parquet")
open_dataset("quux.parquet") %>%
  summarize(across(sym(vars), ~ max(.))) %>%
  collect()
# # A tibble: 1 x 1
#       a
#   <dbl>
# 1     9

但是当 vars 的长度为 2 或更多时,我认为我需要使用 syms 或类似的,但这失败了

open_dataset("quux.parquet") %>%
  summarize(across(all_of(syms(vars)), ~ max(.))) %>%
  collect()
# Error: Must subset columns with a valid subscript vector.
# x Subscript has the wrong type `list`.
# i It must be numeric or character.

我如何懒惰(不加载所有数据)在箭头数据集中找到多列的最大值?

虽然我怀疑 dplyr 中的正确答案将是某种形式的 syms,然后箭头是否支持这是下一个问题。我不受 dplyr 机制的约束,如果有使用ds$NewScan() 或类似方法的方法,我可以接受。

【问题讨论】:

  • 你能说vars是什么吗?变量名作为字符串的字符向量?

标签: r dplyr rlang apache-arrow


【解决方案1】:

这是你所追求的——使用 tidyselect 的 all_of 函数吗?

library(arrow)
library(dplyr)

write_parquet(data.frame(a=c(1,9), b=c(2,10), d=c("q","r")), "quux.parquet")

vars <- c("a", "d")

open_dataset("quux.parquet") %>%
  summarize(across(all_of(vars), ~ max(.))) %>%
  collect()
#> # A tibble: 1 × 2
#>       a d    
#>   <dbl> <chr>
#> 1     9 r

请参阅https://tidyselect.r-lib.org/reference/index.html 了解您可能还想查看的不同 tidyselect 功能。

【讨论】:

    猜你喜欢
    • 2011-10-23
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多