假設我希望重新調整iris資料集中的物種,以便參考水平成為“維吉尼亞”
want_iris <- iris %>%
mutate(Species = relevel(factor(Species), ref = "virginica"))
want_iris$Species
...
[141] virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica
Levels: virginica setosa versicolor
但是,假設我希望動態更改變數(物種)和參考水平(弗吉尼亞州)
var_name <- "Species"
ref_name <- "virginica"
test_iris <- iris %>%
mutate({{var_name}} := relevel(factor({{var_name}}), ref = {{ref_name}}))
test_iris$Species
Error: Problem with `mutate()` column `Species`.
i `Species = relevel(factor("Species"), ref = "virginica")`.
x 'ref' must be an existing level
從我從這些帖子 ( 1 , 2 ) 中收集的資訊來看,在 dplyr 的右側使用動態變數并不是直截了當的,實際上我在3上問了一個類似的問題,盡管問題僅限于列名。
我粗略的猜測是,由于沒有{{}}參考變數名,我指定ref = virginica而不是ref = "virginica"
我該如何解決這個問題?
uj5u.com熱心網友回復:
這是使用的另一種選擇rlang::quo:
var_name <- quo(Species)
ref_name <- "virginica"
test_iris <- iris %>%
mutate(!!var_name := relevel(factor(!!var_name), ref = ref_name))
您可以使用rlang::qq_show以下方法查看它的評估方式:
qq_show(mutate(!!var_name := relevel(factor(!!var_name), ref = ref_name)))
# mutate(^Species := relevel(factor(^Species), ref = ref_name))
uj5u.com熱心網友回復:
使用可能更好 .data
var_name <- "Species"
ref_name <- "virginica"
test_iris <- iris %>%
mutate(!!var_name := relevel(factor(.data[[var_name]]), ref = ref_name))
-輸出
> levels(test_iris$Species)
[1] "virginica" "setosa" "versicolor"
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/325695.html
