下面的代码创建新变量
a_new/b_new/c_new
,但是必须在mutate中一个一个输入代码。有什么方便的方法吗?
实际上,我必须创建很多变量,例如
a_new/b_new/..../z_new
。我不想一个一个输入变量计算代码。
library(tidyverse)
test_data <- data.frame(a=c(1:3),
b=c(3:5),
c=c(1:3),
a_increase=c(1:3)/100,
b_increase=c(3:5)/100,
c_increase=c(6:8)/100)
test_data %>% mutate(
a_new =a* a_increase,
b_new =b* b_increase,
c_new =c* c_increase
)
使用
across
指定您感兴趣的列,然后 get
以字符串“_increase”结尾的相应列。最后,使用 .names
参数设置新的列名。
library(dplyr)
test_data %>%
mutate(across(a:c, ~get(sub("$", "_increase", cur_column())) * .x, .names = "{.col}_new"))
a b c a_increase b_increase c_increase a_new b_new c_new
1 1 3 1 0.01 0.03 0.06 0.01 0.09 0.06
2 2 4 2 0.02 0.04 0.07 0.04 0.16 0.14
3 3 5 3 0.03 0.05 0.08 0.09 0.25 0.24