R 使用 dplyr 重命名,如果列不存在则避免错误并使用 NA 创建新列

Can*_*ice 5 r dataframe dplyr

我们希望在 R 中重命名数据框中的列,但是这些列可能会丢失,这会引发错误:

my_df <- data.frame(a = c(1,2,3), b = c(4,5,6))
my_df %>% dplyr::rename(aa = a, bb = b, cc = c)

Error: Can't rename columns that don't exist.
x Column `c` doesn't exist.
Run Code Online (Sandbox Code Playgroud)

我们想要的输出是这样的,如果原始列不存在,它将创建一个具有 NA 值的新列:

> my_df
  aa bb  c
1  1  4 NA
2  2  5 NA
3  3  6 NA
Run Code Online (Sandbox Code Playgroud)

Pau*_*ulS 2

一个可能的解决方案:

library(tidyverse)

my_df <- data.frame(a = c(1,2,3), b = c(4,5,6))

cols <- c(a = NA_real_, b = NA_real_, c = NA_real_)

my_df %>% add_column(!!!cols[!names(cols) %in% names(.)]) %>% 
  rename(aa = a, bb = b, cc = c)

#>   aa bb cc
#> 1  1  4 NA
#> 2  2  5 NA
#> 3  3  6 NA
Run Code Online (Sandbox Code Playgroud)