如何更方便的新建变量?

问题描述 投票:0回答:1

下面的代码创建新变量

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
)
r dplyr tidyverse mutate
1个回答
1
投票

使用

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
© www.soinside.com 2019 - 2024. All rights reserved.