如何将R语言across函数的输出追加到输入数据中?
在R中使用across将处理结果追加到原数据框
要保留原数据列,同时将across的处理结果作为新列追加,核心是利用mutate结合across的.names参数指定新列命名规则,避免覆盖原列。
示例实现
基于你提供的代码,修改后如下:
library(tidyverse) gdf <- tibble(g = c(1, 1, 2, 3), v1 = 10:13, v2 = 20:23) %>% group_by(g) set.seed(1) n <- rnorm(1) # 追加处理后的新列,保留原v1、v2 gdf %>% mutate(across(v1:v2, ~ .x + n, .names = "{.col}_adj"))
执行后输出:
# A tibble: 4 × 5 # Groups: g [3] g v1 v2 v1_adj v2_adj <dbl> <int> <int> <dbl> <dbl> 1 1 10 20 9.37 19.4 2 1 11 21 10.4 20.4 3 2 12 22 11.4 21.4 4 3 13 23 12.4 22.4
关键说明
.names = "{.col}_adj"是核心:{.col}会自动替换为原列名(比如v1、v2),最终生成v1_adj、v2_adj这类新列。- 你可以自定义命名规则,比如
.names = "{.col}_plus_n"会生成v1_plus_n、v2_plus_n,根据需求调整即可。 - 如果列数不多,也可以手动逐个命名新列,但
across在处理大量列时更高效。
内容的提问来源于stack exchange,提问作者MYaseen208
相关产品推荐
相关产品推荐

