我们希望在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.

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

> my_df
  aa bb  c
1  1  4 NA
2  2  5 NA
3  3  6 NA

推荐答案

一个可能的解决方案:

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

R相关问答推荐

如何创建构成多个独立列条目列表的收件箱框列?

ggplot geom_smooth()用于线性回归虚拟变量-没有回归线

根据选中三个复选框中的一个或两个来调整绘图

将向量组合到一个数据集中,并相应地命名行

如何直接从R中的风险分数计算c指数?

如何在R中合并两个基准点?

将饼图插入条形图

在ggplot2的框图中绘制所有级别的系数

跨列查找多个时间报告

基于数据集属性将科分配给物种

如何将一个方阵分解成没有循环的立方体

仅当后续值与特定值匹配时,才在列中回填Nas

数值型数据与字符混合时如何进行绑定

对R中的列表列执行ROW Mean操作

是否有一个R函数可以输出在输入的字符向量中找到的相应正则表达式模式?

生存时间序列的逻辑检验

如何在R中使用因子行求和?

从字符串01JAN2021创建日期

将y轴格式更改为R中的百分比

Package emMeans:如果emmip模型中包含的变量较少,emMeans模型中的其他变量设置为什么?