当多个group_by/summary时,R箭头返回错误的列

Dav*_*vid 5 r apache-arrow

我有一个包含多个 group-by - summarise 语句的查询。当我取消分组之间的数据时,一切工作正常,但如果我不这样做,其中一列就会被另一列替换。

\n

我希望这些列不会改变。例如,在下面的示例中,变量gender应该是F, orM而不是Group X

\n
library(dplyr)\nlibrary(arrow)\n\n# Create sample dataset\nN <- 1000\nset.seed(123)\norig_data <- tibble(\n  code_group = sample(paste("Group", 1:2), N, replace = TRUE),\n  year = sample(2015:2016, N, replace = TRUE),\n  gender = sample(c("F", "M"), N, replace = TRUE),\n  value = runif(N, 0, 10)\n)\nwrite_dataset(orig_data, "example")\n\n# Query and replicate the error\n(ds <- open_dataset("example/"))\n#> FileSystemDataset with 1 Parquet file\n#> code_group: string\n#> year: int32\n#> gender: string\n#> value: double\n\nds |>\n  group_by(year, code_group, gender) |>\n  summarise(value = sum(value)) |>\n  group_by(code_group, gender) |>\n  summarise(value = max(value), NN = n()) |>\n  collect()\n#> # A tibble: 2 \xc3\x97 4\n#> # Groups:   code_group [2]\n#>   code_group gender  value    NN\n#>   <chr>      <chr>   <dbl> <int>\n#> 1 Group 1    Group 1  724.     4\n#> 2 Group 2    Group 2  661.     4\n
Run Code Online (Sandbox Code Playgroud)\n

错误性别变量被组变量的值替换

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

现在请注意,ungroup()在分组依据 - 汇总调用之间插入后,性别不会被替换

\n

快速查看查询(注意 Node 4 where "gender": code_group

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

由reprex 包于 2022 年 12 月 7 日创建(v2.0.1)

\n

我对 arrow/dplyr 的理解是否错误,或者这是一个错误(如果是,则在 arrow 或 dplyr/dbplyr 中)?

\n

Dav*_*vid 3

请注意,这确实是一个错误,并已通过PR 14905关闭。它应该与 GitHub 上的 arrow 开发版本一起使用。