根据 R 中的变量名规则创建新变量

Create new variables based on variable names rule in R

我想根据以下规则创建新变量:

而新的变量是在之前的变量中添加了“_ln”字符串。 这是数据集(我的真实数据集有 184 个变量,这就是我想要一个函数的原因)

library(dplyr)
library(tidyr)

df <- data.frame(kg_chicken = c(1,2,3,4,5,6),
                 kg_chicken_pct = c(0.1,0.2,0.3,0.4,0.5,0.6),
                 sym_kg_chicken = c(-0.25,-0.15,-0.05,0.05,0.15,0.25))
df
  kg_chicken kg_chicken_pct sym_kg_chicken
1          1            0.1          -0.25
2          2            0.2          -0.15
3          3            0.3          -0.05
4          4            0.4           0.05
5          5            0.5           0.15
6          6            0.6           0.25

这是我试过的:

df_final <- df %>%
  mutate_if(!starts_with("sym") & !ends_with("pct"),~ paste0(.,"_ln") = log(.))

但是我得到这个错误:

Error: unexpected '=' in:
"df_final <- df %>%
  mutate_if(!starts_with("sym") & !ends_with("pct"),~ paste0(.,"_ln") ="

这是我的预期结果:

df_final
  kg_chicken kg_chicken_pct sym_kg_chicken kg_chicken_ln
1          1            0.1          -0.25         0.000
2          2            0.2          -0.15         0.693
3          3            0.3          -0.05         1.098
4          4            0.4           0.05         1.386
5          5            0.5           0.15         1.609
6          6            0.6           0.25         1.791

任何帮助将不胜感激(即使是在 rbase 上)。

mutate_if 已被 mutate 中的 across 取代,因此现在的方法是:

df %>%
  mutate(across(!starts_with("sym") & !ends_with("pct"), .fns = log, .names = "{.col}_ln"))

#>   kg_chicken kg_chicken_pct sym_kg_chicken kg_chicken_ln
#> 1          1            0.1          -0.25     0.0000000
#> 2          2            0.2          -0.15     0.6931472
#> 3          3            0.3          -0.05     1.0986123
#> 4          4            0.4           0.05     1.3862944
#> 5          5            0.5           0.15     1.6094379
#> 6          6            0.6           0.25     1.7917595