1append_df <- function(x, y, after = length(x), remove = FALSE) { 2 if (is.character(after)) { 3 after <- match(after, dplyr::tbl_vars(x)) 4 } else if (!is.integer(after)) { 5 stop("`after` must be character or integer", call. = FALSE) 6 } 7 8 # Replace duplicated variables 9 x_vars <- setdiff(names(x), names(y)) 10 if (remove) { 11 x_vars <- setdiff(x_vars, names(x)[[after]]) 12 after <- after - 1L 13 } 14 15 y <- append(x[x_vars], y, after = after) 16 structure(y, class = class(x), row.names = .row_names_info(x, 0L)) 17} 18 19append_col <- function(x, col, name, after = length(x)) { 20 name <- enc2utf8(name) 21 append_df(x, set_names(list(col), name), after = after) 22} 23