如何用tidyverse基于向量为data.frame批量添加常量值列?
批量添加常量值列的tidyverse实现方案
以下是几种适配任意列数的通用实现方法:
方法1:mutate + 命名列表 + !!!展开
利用dplyr::mutate()配合三重感叹号!!!展开命名列表,直接批量添加列:
library(dplyr) df <- tibble( col1 = c(1, 2), col2 = c(3, 4) ) new_cols <- c("miss1", "miss2") # 生成对应列名的常量值命名列表 const_cols <- set_names(rep(list("unknown"), length(new_cols)), new_cols) # 批量添加列 df %>% mutate(!!!const_cols)
方法2:tibble::add_column()
tibble包的add_column()原生支持批量添加新列,用法更直观:
library(tibble) df %>% add_column(!!!set_names(rep("unknown", length(new_cols)), new_cols))
两种方法都能得到预期结果:
# A tibble: 2 × 4 col1 col2 miss1 miss2 <dbl> <dbl> <chr> <chr> 1 1 3 unknown unknown 2 2 4 unknown unknown
原尝试方案的问题说明
- 尝试1:
map_df会将每次添加单列的结果按行绑定,导致行数重复(原数据2行,2次map后得到2×2=4行),不符合需求。 - 尝试2:
across()的设计目标是修改已存在的列,无法直接创建新列,因此当目标列不存在时会报错。
内容的提问来源于stack exchange,提问作者boshek
相关产品推荐
相关产品推荐

