我有一個很大的鑲木地板檔案,我通過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")
vars <- c("a")
open_dataset("quux.parquet") %>%
summarize(across(sym(vars), ~ max(.))) %>%
collect()
# # A tibble: 1 x 1
# a
# <dbl>
# 1 9
但是當vars長度為 2 或更多時,我認為我需要使用syms或類似的,但這失敗了
vars <- c("a", "b")
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()或類似的方法,我很樂意。
uj5u.com熱心網友回復:
這是你所追求的——使用 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
有關您可能還想查看的不同 tidyselect 函式,請參閱https://tidyselect.r-lib.org/reference/index.html 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/527683.html
上一篇:按數字向量拆分字串
下一篇:使用R重新表達分類欄位值
