根据 R 中的变量名规则创建新变量
Create new variables based on variable names rule in R
我想根据以下规则创建新变量:
- Var 不以“sym”开头
- Var 不以“pct”结尾
而新的变量是在之前的变量中添加了“_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
我想根据以下规则创建新变量:
- Var 不以“sym”开头
- Var 不以“pct”结尾
而新的变量是在之前的变量中添加了“_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