我想根據以下規則創建新變數:
- Var 不以“sym”開頭
- Var 不以“pct”結尾
新的 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
這是我嘗試過的:
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 上)。
uj5u.com熱心網友回復:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/318540.html
