基于列名批量创建新列的R语言实现方法求助
自动化生成以'x'结尾列的翻倍新列
方法一:用dplyr的across()函数(推荐)
利用across()可以批量处理符合条件的列,搭配ends_with()筛选以'x'结尾的列,同时通过.names参数指定新列的命名规则,一步完成所有目标列的处理:
library(dplyr) set.seed(8) id <- seq(1,700, by = 1) a1_x <- runif(700, 0, 10) a1_y <- runif(700, 0, 10) a2_x <- runif(700, 0, 10) df <- data.frame(id, a1_x, a1_y, a2_x) # 自动化生成新列 df <- df %>% mutate(across(ends_with("x"), ~ .x * 2, .names = "{col}_new"))
代码解释:
ends_with("x"):精准筛选所有列名以'x'结尾的列;~ .x * 2:对每一列执行“乘以2”的操作,.x代表当前处理的列;.names = "{col}_new":新列名规则为原列名加上_new,和你手动实现的命名完全一致。
方法二:Base R 实现
如果不想依赖dplyr,也可以用Base R的方式批量处理:
# 筛选以'x'结尾的列名 x_cols <- grep("x$", names(df), value = TRUE) # 循环生成新列 for(col in x_cols) { df[[paste0(col, "_new")]] <- df[[col]] * 2 }
代码解释:
grep("x$", names(df), value = TRUE):用正则表达式匹配以x结尾的列名;- 循环遍历每个目标列,通过
paste0拼接新列名,赋值为原列值的2倍。
不管涉及多少列,以上两种方法都能一次性完成自动化处理,不用再手动逐个编写mutate语句。
内容的提问来源于stack exchange,提问作者Andres Gonzalez
相关产品推荐
相关产品推荐

