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