簡體   English   中英

是否有用於替換 tidyverse 中的因子水平的矢量化方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM