簡體   English   中英

將多列轉換為因子並使用 mutate(across) 重新調整

[英]Converting multiple columns to factors and releveling with mutate(across)

dat <- data.frame(Comp1Letter = c("A", "B", "D", "F", "U", "A*", "B", "C"),
                   Comp2Letter = c("B", "C", "E", "U", "A", "C", "A*", "E"),
                   Comp3Letter = c("D", "A", "C", "D", "F", "D", "C", "A"))  

GradeLevels <- c("A*", "A", "B", "C", "D", "E", "F", "G", "U")

我有一個看起來像上面的 dataframe (但我不想更改許多其他列)。

我有興趣更改的列包含字母等級列表,但當前是字符向量且順序不正確。

我需要將這些列中的每一列轉換為具有正確順序的因子。 我已經能夠使用下面的代碼讓它工作:

factordat <-
    dat %>%
      mutate(Comp1Letter = factor(Comp1Letter, levels = GradeLevels)) %>%
      mutate(Comp2Letter = factor(Comp2Letter, levels = GradeLevels)) %>%
      mutate(Comp3Letter = factor(Comp3Letter, levels = GradeLevels)) 

然而,這非常冗長並且占用了大量空間。

看看其他一些問題,我嘗試使用 mutate() 和 cross() 的組合,如下所示:

factordat <-
  dat %>%
    mutate(across(c(Comp1Letter, Comp2Letter, Comp3Letter) , factor(levels = GradeLetters))) 

但是,當我這樣做時,向量仍然是字符向量。

有人可以告訴我我做錯了什么或提供另一種選擇嗎?

您可以像這樣匿名across進行操作:

dat <- data.frame(Comp1Letter = c("A", "B", "D", "F", "U", "A*", "B", "C"),
                   Comp2Letter = c("B", "C", "E", "U", "A", "C", "A*", "E"),
                   Comp3Letter = c("D", "A", "C", "D", "F", "D", "C", "A"))  

GradeLevels <- c("A*", "A", "B", "C", "D", "E", "F", "G", "U")

dat %>%
  tibble::as_tibble() %>%
    dplyr::mutate(dplyr::across(c(Comp1Letter, Comp2Letter, Comp3Letter) , ~forcats::parse_factor(., levels = GradeLevels)))

# # A tibble: 8 × 3
#   Comp1Letter Comp2Letter Comp3Letter
#   <fct>       <fct>       <fct>      
# 1 A           B           D          
# 2 B           C           A          
# 3 D           E           C          
# 4 F           U           D          
# 5 U           A           F          
# 6 A*          C           D          
# 7 B           A*          C          
# 8 C           E           A     

您已經很接近了,剩下要做的就是使因子 function 匿名。 這可以通過~. tidyversefunction(x)中, x在基礎 R 中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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