簡體   English   中英

當多個 group_by / summarize 時,R Arrow 返回錯誤的列

[英]R Arrow returns wrong column when multiple group_by / summarise

我有一個包含多個分組依據 - 匯總語句的查詢。 當我取消分組之間的數據時,一切正常,但如果我不這樣做,其中一列將被另一列替換。

我希望列不會更改。 例如在下面的示例中,變量gender應該是FM而不是Group X

library(dplyr)
library(arrow)

# Create sample dataset
N <- 1000
set.seed(123)
orig_data <- tibble(
  code_group = sample(paste("Group", 1:2), N, replace = TRUE),
  year = sample(2015:2016, N, replace = TRUE),
  gender = sample(c("F", "M"), N, replace = TRUE),
  value = runif(N, 0, 10)
)
write_dataset(orig_data, "example")

# Query and replicate the error
(ds <- open_dataset("example/"))
#> FileSystemDataset with 1 Parquet file
#> code_group: string
#> year: int32
#> gender: string
#> value: double

ds |>
  group_by(year, code_group, gender) |>
  summarise(value = sum(value)) |>
  group_by(code_group, gender) |>
  summarise(value = max(value), NN = n()) |>
  collect()
#> # A tibble: 2 × 4
#> # Groups:   code_group [2]
#>   code_group gender  value    NN
#>   <chr>      <chr>   <dbl> <int>
#> 1 Group 1    Group 1  724.     4
#> 2 Group 2    Group 2  661.     4

錯誤,性別變量被組變量的值替換

ds |>
  group_by(year, code_group, gender) |>
  summarise(value = sum(value)) |>
  ungroup() |>                                             #< Added this line...
  group_by(code_group, gender) |>
  summarise(value = max(value), NN = n()) |>
  collect()
#> # A tibble: 4 × 4
#> # Groups:   code_group [2]
#>   code_group gender value    NN
#>   <chr>      <chr>  <dbl> <int>
#> 1 Group 1    F       724.     2
#> 2 Group 2    M       627.     2
#> 3 Group 1    M       658.     2
#> 4 Group 2    F       661.     2

現在請注意,在 group-by - summarize 調用之間插入ungroup()之后,性別不會被替換

快速查看查詢(注意節點 4,其中"gender": code_group

ds |>
  group_by(year, code_group, gender) |>
  summarise(value = sum(value)) |>
  group_by(code_group, gender) |>
  summarise(value = max(value), NN = n()) |> 
  show_query()
#> ExecPlan with 8 nodes:
#> 7:SinkNode{}
#>   6:ProjectNode{projection=[code_group, gender, value, NN]}
#>     5:GroupByNode{keys=["code_group", "gender"], aggregates=[
#>      hash_max(value, {skip_nulls=false, min_count=0}),
#>      hash_sum(NN, {skip_nulls=true, min_count=1}),
#>     ]}
#>       4:ProjectNode{projection=[value, "NN": 1, code_group, "gender": code_group]}
#>         3:ProjectNode{projection=[year, code_group, gender, value]}
#>           2:GroupByNode{keys=["year", "code_group", "gender"], aggregates=[
#>              hash_sum(value, {skip_nulls=false, min_count=0}),
#>           ]}
#>             1:ProjectNode{projection=[value, year, code_group, gender]}
#>               0:SourceNode{}

reprex 包(v2.0.1) 創建於 2022-12-07

我是否對 arrow/dplyr 有錯誤的理解,或者這是一個錯誤(如果是的話,是在 arrow 還是 dplyr/dbplyr 中)?

請注意,這確實是一個錯誤,已通過PR 14905關閉。 它應該與 GitHub 上的 arrow 開發版本一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM