From 2979f815a28ae4b07971e41d986eda63be39f98b Mon Sep 17 00:00:00 2001 From: apalacio9502 Date: Sun, 2 Jun 2024 20:27:06 -0500 Subject: [PATCH 1/2] mutate() now supports the argument .keep = "transmute" --- R/dplyr-reimplement.R | 21 +++++++++++++-------- R/mutate.R | 6 ++++-- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/R/dplyr-reimplement.R b/R/dplyr-reimplement.R index 2df171f02..ab10dcc98 100644 --- a/R/dplyr-reimplement.R +++ b/R/dplyr-reimplement.R @@ -5,14 +5,19 @@ duckplyr_mutate_keep <- function(out, keep, used, names_new, names_groups) { names <- names(out) - names_keep <- switch(keep, - used = names(used)[used], - unused = names(used)[!used], - none = character(), - abort("Unknown `keep`.", .internal = TRUE) - ) - - names_out <- intersect(names, c(names_new, names_groups, names_keep)) + if (keep == "transmute") { + names_groups <- setdiff(names_groups, names_new) + names_out <- c(names_groups, names_new) + } else { + names_keep <- switch( + keep, + used = names(used)[used], + unused = names(used)[!used], + none = character(), + abort("Unknown `keep`.", .internal = TRUE) + ) + names_out <- intersect(names, c(names_new, names_groups, names_keep)) + } select(out, !!!names_out) } diff --git a/R/mutate.R b/R/mutate.R index 5f7e4bfe5..95887fb57 100644 --- a/R/mutate.R +++ b/R/mutate.R @@ -1,6 +1,6 @@ # Generated by 02-duckplyr_df-methods.R #' @export -mutate.duckplyr_df <- function(.data, ..., .by = NULL, .keep = c("all", "used", "unused", "none"), .before = NULL, .after = NULL) { +mutate.duckplyr_df <- function(.data, ..., .by = NULL, .keep = c("all", "used", "unused", "none", "transmute"), .before = NULL, .after = NULL) { by_arg <- enquo(.by) keep <- arg_match(.keep) @@ -55,6 +55,7 @@ mutate.duckplyr_df <- function(.data, ..., .by = NULL, .keep = c("all", "used", out <- mutate_relocate( out = out, + keep = keep, before = {{ .before }}, after = {{ .after }}, names_original = names_original @@ -81,7 +82,7 @@ mutate.duckplyr_df <- function(.data, ..., .by = NULL, .keep = c("all", "used", return(out) # dplyr implementation - keep <- arg_match0(.keep, values = c("all", "used", "unused", "none")) + keep <- arg_match0(.keep, values = c("all", "used", "unused", "none", "transmute")) by <- compute_by({{ .by }}, .data, by_arg = ".by", data_arg = ".data") @@ -94,6 +95,7 @@ mutate.duckplyr_df <- function(.data, ..., .by = NULL, .keep = c("all", "used", out <- mutate_relocate( out = out, + keep = keep, before = {{ .before }}, after = {{ .after }}, names_original = names_original From 04a6252dc00b9886b82bf2b00bda8c7cc0e7bb73 Mon Sep 17 00:00:00 2001 From: apalacio9502 Date: Sun, 2 Jun 2024 20:39:27 -0500 Subject: [PATCH 2/2] dplyr (>= 1.1.4.9000) is required --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 61cdaa332..7fbbbe370 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -21,7 +21,7 @@ Imports: cli, collections, DBI, - dplyr (>= 1.1.4), + dplyr (>= 1.1.4.9000), duckdb (>= 0.10.2), glue, jsonlite,