我想根据以下规则创建新变量:
新的 var 是之前的 var 添加了“_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
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
df_final <- df %>%
mutate_if(!starts_with("sym") & !ends_with("pct"),~ paste0(.,"_ln") = log(.))
Run Code Online (Sandbox Code Playgroud)
但我收到这个错误:
Error: unexpected '=' in:
"df_final <- df %>%
mutate_if(!starts_with("sym") & !ends_with("pct"),~ paste0(.,"_ln") ="
Run Code Online (Sandbox Code Playgroud)
这是我的预期结果:
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
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激(即使是在 rbase 上)。
mutate_if已被使用acrossinside取代mutate,所以现在执行此操作的方法是:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
222 次 |
| 最近记录: |