Skip to content

Commit

Permalink
Merge pull request #105 from duckdblabs/f-94-group-rest
Browse files Browse the repository at this point in the history
  • Loading branch information
krlmlr committed Mar 7, 2024
2 parents ae6e359 + 1b773a6 commit 89a727e
Show file tree
Hide file tree
Showing 18 changed files with 336 additions and 1 deletion.
9 changes: 9 additions & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,22 @@ S3method(explain,duckplyr_df)
S3method(full_join,duckplyr_df)
S3method(group_by,duckplyr_df)
S3method(group_data,duckplyr_df)
S3method(group_indices,duckplyr_df)
S3method(group_keys,duckplyr_df)
S3method(group_map,duckplyr_df)
S3method(group_modify,duckplyr_df)
S3method(group_nest,duckplyr_df)
S3method(group_size,duckplyr_df)
S3method(group_split,duckplyr_df)
S3method(group_trim,duckplyr_df)
S3method(group_vars,duckplyr_df)
S3method(groups,duckplyr_df)
S3method(head,duckplyr_df)
S3method(inner_join,duckplyr_df)
S3method(intersect,duckplyr_df)
S3method(left_join,duckplyr_df)
S3method(mutate,duckplyr_df)
S3method(n_groups,duckplyr_df)
S3method(nest_by,duckplyr_df)
S3method(nest_join,duckplyr_df)
S3method(print,relational_relexpr)
Expand Down Expand Up @@ -252,12 +257,15 @@ importFrom(dplyr,funs_)
importFrom(dplyr,group_by)
importFrom(dplyr,group_by_prepare)
importFrom(dplyr,group_data)
importFrom(dplyr,group_indices)
importFrom(dplyr,group_keys)
importFrom(dplyr,group_map)
importFrom(dplyr,group_modify)
importFrom(dplyr,group_nest)
importFrom(dplyr,group_rows)
importFrom(dplyr,group_size)
importFrom(dplyr,group_split)
importFrom(dplyr,group_trim)
importFrom(dplyr,group_vars)
importFrom(dplyr,group_walk)
importFrom(dplyr,grouped_df)
Expand All @@ -276,6 +284,7 @@ importFrom(dplyr,mutate)
importFrom(dplyr,mutate_all)
importFrom(dplyr,n)
importFrom(dplyr,n_distinct)
importFrom(dplyr,n_groups)
importFrom(dplyr,nest_by)
importFrom(dplyr,nest_join)
importFrom(dplyr,nth)
Expand Down
2 changes: 2 additions & 0 deletions R/dplyr.R
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ ensure_group_vars <- dplyr$ensure_group_vars
env_bind_do_pronouns <- dplyr$env_bind_do_pronouns
filter_rows <- dplyr$filter_rows
groups <- dplyr$groups
group_nest_impl <- dplyr$group_nest_impl
group_split_impl <- dplyr$group_split_impl
join_cast_common <- dplyr$join_cast_common
join_filter <- dplyr$join_filter
join_mutate <- dplyr$join_mutate
Expand Down
4 changes: 4 additions & 0 deletions R/duckplyr-package.R
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,13 @@
#' @importFrom collections dict
#' @importFrom collections queue
#' @importFrom dplyr group_by_prepare
#' @importFrom dplyr group_indices
#' @importFrom dplyr group_nest
#' @importFrom dplyr group_split
#' @importFrom dplyr group_trim
#' @importFrom dplyr grouped_df
#' @importFrom dplyr if_else
#' @importFrom dplyr n_groups
#' @importFrom glue glue
#' @importFrom lifecycle deprecated
#' @importFrom tibble as_tibble
Expand Down
41 changes: 41 additions & 0 deletions R/group_indices.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Generated by 02-duckplyr_df-methods.R
#' @export
group_indices.duckplyr_df <- function(.data, ...) {
# Our implementation
rel_try(
# Always fall back to dplyr
"No relational implementation for group_indices()" = TRUE,
{
return(out)
}
)

# dplyr forward
group_indices <- dplyr$group_indices.data.frame
out <- group_indices(.data, ...)
return(out)

# dplyr implementation
if (dots_n(...) > 0) {
lifecycle::deprecate_warn(
"1.0.0", "group_indices(... = )",
details = "Please `group_by()` first",
always = TRUE
)
.data <- group_by(.data, ...)
}

# .Call(`dplyr_group_indices`, .data, group_rows(.data))
}

duckplyr_group_indices <- function(.data, ...) {
try_fetch(
.data <- as_duckplyr_df(.data),
error = function(e) {
testthat::skip(conditionMessage(e))
}
)
out <- group_indices(.data, ...)
class(out) <- setdiff(class(out), "duckplyr_df")
out
}
36 changes: 36 additions & 0 deletions R/group_nest.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Generated by 02-duckplyr_df-methods.R
#' @export
group_nest.duckplyr_df <- function(.tbl, ..., .key = "data", keep = FALSE) {
# Our implementation
rel_try(
# Always fall back to dplyr
"No relational implementation for group_nest()" = TRUE,
{
return(out)
}
)

# dplyr forward
group_nest <- dplyr$group_nest.data.frame
out <- group_nest(.tbl, ..., .key = .key, keep = keep)
return(out)

# dplyr implementation
if (dots_n(...)) {
group_nest_impl(group_by(.tbl, ...), .key = .key, keep = keep)
} else {
tibble(!!.key := list(.tbl))
}
}

duckplyr_group_nest <- function(.tbl, ...) {
try_fetch(
.tbl <- as_duckplyr_df(.tbl),
error = function(e) {
testthat::skip(conditionMessage(e))
}
)
out <- group_nest(.tbl, ...)
class(out) <- setdiff(class(out), "duckplyr_df")
out
}
37 changes: 37 additions & 0 deletions R/group_split.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Generated by 02-duckplyr_df-methods.R
#' @export
group_split.duckplyr_df <- function(.tbl, ..., .keep = TRUE, keep = deprecated()) {
# Our implementation
rel_try(
# Always fall back to dplyr
"No relational implementation for group_split()" = TRUE,
{
return(out)
}
)

# dplyr forward
group_split <- dplyr$group_split.data.frame
out <- group_split(.tbl, ..., .keep = .keep, keep = keep)
return(out)

# dplyr implementation
if (!missing(keep)) {
lifecycle::deprecate_warn("1.0.0", "group_split(keep = )", "group_split(.keep = )", always = TRUE)
.keep <- keep
}
data <- group_by(.tbl, ...)
group_split_impl(data, .keep = .keep)
}

duckplyr_group_split <- function(.tbl, ...) {
try_fetch(
.tbl <- as_duckplyr_df(.tbl),
error = function(e) {
testthat::skip(conditionMessage(e))
}
)
out <- group_split(.tbl, ...)
class(out) <- setdiff(class(out), "duckplyr_df")
out
}
32 changes: 32 additions & 0 deletions R/group_trim.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Generated by 02-duckplyr_df-methods.R
#' @export
group_trim.duckplyr_df <- function(.tbl, .drop = group_by_drop_default(.tbl)) {
# Our implementation
rel_try(
# Always fall back to dplyr
"No relational implementation for group_trim()" = TRUE,
{
return(out)
}
)

# dplyr forward
group_trim <- dplyr$group_trim.data.frame
out <- group_trim(.tbl, .drop)
return(out)

# dplyr implementation
.tbl
}

duckplyr_group_trim <- function(.tbl, ...) {
try_fetch(
.tbl <- as_duckplyr_df(.tbl),
error = function(e) {
testthat::skip(conditionMessage(e))
}
)
out <- group_trim(.tbl, ...)
class(out) <- setdiff(class(out), "duckplyr_df")
out
}
32 changes: 32 additions & 0 deletions R/n_groups.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Generated by 02-duckplyr_df-methods.R
#' @export
n_groups.duckplyr_df <- function(x) {
# Our implementation
rel_try(
# Always fall back to dplyr
"No relational implementation for n_groups()" = TRUE,
{
return(out)
}
)

# dplyr forward
n_groups <- dplyr$n_groups.data.frame
out <- n_groups(x)
return(out)

# dplyr implementation
nrow(group_data(x))
}

duckplyr_n_groups <- function(x, ...) {
try_fetch(
x <- as_duckplyr_df(x),
error = function(e) {
testthat::skip(conditionMessage(e))
}
)
out <- n_groups(x, ...)
class(out) <- setdiff(class(out), "duckplyr_df")
out
}
5 changes: 5 additions & 0 deletions R/overwrite.R
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,21 @@ methods_overwrite <- function() {
vctrs::s3_register("dplyr::full_join", "data.frame", full_join.duckplyr_df)
vctrs::s3_register("dplyr::group_by", "data.frame", group_by.duckplyr_df)
vctrs::s3_register("dplyr::group_data", "data.frame", group_data.duckplyr_df)
vctrs::s3_register("dplyr::group_indices", "data.frame", group_indices.duckplyr_df)
vctrs::s3_register("dplyr::group_keys", "data.frame", group_keys.duckplyr_df)
vctrs::s3_register("dplyr::group_map", "data.frame", group_map.duckplyr_df)
vctrs::s3_register("dplyr::group_modify", "data.frame", group_modify.duckplyr_df)
vctrs::s3_register("dplyr::group_nest", "data.frame", group_nest.duckplyr_df)
vctrs::s3_register("dplyr::group_size", "data.frame", group_size.duckplyr_df)
vctrs::s3_register("dplyr::group_split", "data.frame", group_split.duckplyr_df)
vctrs::s3_register("dplyr::group_trim", "data.frame", group_trim.duckplyr_df)
vctrs::s3_register("dplyr::group_vars", "data.frame", group_vars.duckplyr_df)
vctrs::s3_register("dplyr::groups", "data.frame", groups.duckplyr_df)
vctrs::s3_register("dplyr::inner_join", "data.frame", inner_join.duckplyr_df)
vctrs::s3_register("dplyr::intersect", "data.frame", intersect.duckplyr_df)
vctrs::s3_register("dplyr::left_join", "data.frame", left_join.duckplyr_df)
vctrs::s3_register("dplyr::mutate", "data.frame", mutate.duckplyr_df)
vctrs::s3_register("dplyr::n_groups", "data.frame", n_groups.duckplyr_df)
vctrs::s3_register("dplyr::nest_by", "data.frame", nest_by.duckplyr_df)
vctrs::s3_register("dplyr::nest_join", "data.frame", nest_join.duckplyr_df)
vctrs::s3_register("dplyr::pull", "data.frame", pull.duckplyr_df)
Expand Down
5 changes: 5 additions & 0 deletions R/restore.R
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,21 @@ methods_restore <- function() {
vctrs::s3_register("dplyr::full_join", "data.frame", dplyr$full_join.data.frame)
vctrs::s3_register("dplyr::group_by", "data.frame", dplyr$group_by.data.frame)
vctrs::s3_register("dplyr::group_data", "data.frame", dplyr$group_data.data.frame)
vctrs::s3_register("dplyr::group_indices", "data.frame", dplyr$group_indices.data.frame)
vctrs::s3_register("dplyr::group_keys", "data.frame", dplyr$group_keys.data.frame)
vctrs::s3_register("dplyr::group_map", "data.frame", dplyr$group_map.data.frame)
vctrs::s3_register("dplyr::group_modify", "data.frame", dplyr$group_modify.data.frame)
vctrs::s3_register("dplyr::group_nest", "data.frame", dplyr$group_nest.data.frame)
vctrs::s3_register("dplyr::group_size", "data.frame", dplyr$group_size.data.frame)
vctrs::s3_register("dplyr::group_split", "data.frame", dplyr$group_split.data.frame)
vctrs::s3_register("dplyr::group_trim", "data.frame", dplyr$group_trim.data.frame)
vctrs::s3_register("dplyr::group_vars", "data.frame", dplyr$group_vars.data.frame)
vctrs::s3_register("dplyr::groups", "data.frame", dplyr$groups.data.frame)
vctrs::s3_register("dplyr::inner_join", "data.frame", dplyr$inner_join.data.frame)
vctrs::s3_register("dplyr::intersect", "data.frame", dplyr$intersect.data.frame)
vctrs::s3_register("dplyr::left_join", "data.frame", dplyr$left_join.data.frame)
vctrs::s3_register("dplyr::mutate", "data.frame", dplyr$mutate.data.frame)
vctrs::s3_register("dplyr::n_groups", "data.frame", dplyr$n_groups.data.frame)
vctrs::s3_register("dplyr::nest_by", "data.frame", dplyr$nest_by.data.frame)
vctrs::s3_register("dplyr::nest_join", "data.frame", dplyr$nest_join.data.frame)
vctrs::s3_register("dplyr::pull", "data.frame", dplyr$pull.data.frame)
Expand Down
12 changes: 12 additions & 0 deletions dplyr-methods/group_indices.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
group_indices.data.frame <- function(.data, ...) {
if (dots_n(...) > 0) {
lifecycle::deprecate_warn(
"1.0.0", "group_indices(... = )",
details = "Please `group_by()` first",
always = TRUE
)
.data <- group_by(.data, ...)
}

.Call(`dplyr_group_indices`, .data, group_rows(.data))
}
7 changes: 7 additions & 0 deletions dplyr-methods/group_nest.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
group_nest.data.frame <- function(.tbl, ..., .key = "data", keep = FALSE) {
if (dots_n(...)) {
group_nest_impl(group_by(.tbl, ...), .key = .key, keep = keep)
} else {
tibble(!!.key := list(.tbl))
}
}
8 changes: 8 additions & 0 deletions dplyr-methods/group_split.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
group_split.data.frame <- function(.tbl, ..., .keep = TRUE, keep = deprecated()) {
if (!missing(keep)) {
lifecycle::deprecate_warn("1.0.0", "group_split(keep = )", "group_split(.keep = )", always = TRUE)
.keep <- keep
}
data <- group_by(.tbl, ...)
group_split_impl(data, .keep = .keep)
}
3 changes: 3 additions & 0 deletions dplyr-methods/group_trim.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
group_trim.data.frame <- function(.tbl, .drop = group_by_drop_default(.tbl)) {
.tbl
}
3 changes: 3 additions & 0 deletions dplyr-methods/n_groups.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
n_groups.data.frame <- function(x) {
nrow(group_data(x))
}
13 changes: 13 additions & 0 deletions patch/group_indices.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
diff --git b/R/group_indices.R a/R/group_indices.R
index 48bcf3e..6c1bf15 100644
--- b/R/group_indices.R
+++ a/R/group_indices.R
@@ -25,7 +25,7 @@ group_indices.duckplyr_df <- function(.data, ...) {
.data <- group_by(.data, ...)
}

- .Call(`dplyr_group_indices`, .data, group_rows(.data))
+ # .Call(`dplyr_group_indices`, .data, group_rows(.data))
}

duckplyr_group_indices <- function(.data, ...) {
Loading

0 comments on commit 89a727e

Please sign in to comment.