[英]Is there a vectorized method for replacing factor levels in tidyverse
我希望能夠通過用變量(列)的名稱替換其中一個級別來有效地重新編碼數據框的大量變量(列)的因子級別。
Health <- tibble(Anemia = c("yes", "no", "no"),
BloodPressure = c("no", "yes", "no"),
Asthma = c("no", "no", "yes"))
我想讓 output 看起來像這樣
Health2 <- tibble(Anemia = c("Anemia", "no", "no"),
BloodPressure = c("no", "BloodPressure", "no"),
Asthmal = c("no", "no", "Asthma"))
我想要這個 output 而無需手動更改每個級別,因為我有一個包含 100 個左右變量的數據庫,我必須重新編碼。 我試圖創建一個 function 來做到這一點
Med_rename <- function(x) {
levels = c(no = "no", names(x) ="yes")
fct_recode(x, !!!levels)
}
Med_rename2 <- function(x) {
y = names(x)
levels = c(no = "no", y ="yes")
fct_recode(x, !!!levels)
}
但是這些嘗試中的任何一個或其他使用矢量化嘗試替換級別的 output 都不會用變量(列)名稱替換“是”。 是否有另一種矢量化方式來用列名替換“是”並應用於大量變量?
您可以使用 dplyr 中的dplyr
cur_column()
來使用要替換的列名。
library(dplyr)
Health %>% mutate(across(.fns = ~replace(., . == 'yes', cur_column())))
# Anemia BloodPressure Asthma
# <chr> <chr> <chr>
#1 Anemia no no
#2 no BloodPressure no
#3 no no Asthma
在基礎 R 中,帶有lapply
:
Health[] <- lapply(names(Health), function(x)
replace(Health[[x]], Health[[x]] == 'yes', x))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.