如何从名称列表向tibble批量添加多列?
批量给tibble添加指定列名的列
这里有几种简洁的一行代码实现方式,完全匹配你的需求:
假设你要添加的列名列表是cols_to_add <- c("c", "d", "e"),默认值设为0,具体方法如下:
方法1:add_column()配合非标准求值
library(tidyverse) df <- tibble(a = 1:3, b = 3:1) cols_to_add <- c("c", "d", "e") df <- df %>% add_column(!!!set_names(rep(0, length(cols_to_add)), cols_to_add))
set_names会把重复的默认值和列名绑定成命名列表,!!!负责把这个列表展开成add_column()的多个参数,一次性完成批量添加。
方法2:mutate() + across()(更贴合tidyverse风格)
df <- df %>% mutate(across(all_of(cols_to_add), ~0))
all_of()用来引用字符向量里的列名,~0指定新列的默认值,你也可以把它换成任意需要的计算逻辑或固定值。
方法3:bind_cols()合并新列
df <- df %>% bind_cols(tibble(!!!set_names(rep(0, length(cols_to_add)), cols_to_add)))
先创建包含所有新列的tibble,再和原数据框合并,效果和第一种方法一致。
执行任意一种方法后,都会得到如下结果:
# A tibble: 3 × 5 a b c d e <int> <int> <dbl> <dbl> <dbl> 1 1 3 0 0 0 2 2 2 0 0 0 3 3 1 0 0 0
内容的提问来源于stack exchange,提问作者Angelo
相关产品推荐
相关产品推荐

