代码之家  ›  专栏  ›  技术社区  ›  Lee

当有这么多列时,使用R更改列的特定值

  •  0
  • Lee  · 技术社区  · 3 年前

    df 用于演示目的。

    df<-data.frame(id=c(1,1,3,4,5,6,7),title_1=c("H","M","","M","L","L","H")
                   ,title_2=c("M","M","","L","L","L","H")
                   ,title_3=c("H","H","M","L","","M","M"))
    

    我想做的是更改值。如果值为null "" ,那么我想把它改为 0 . H ,我想把它改为 3 。如果值为 M 2 . 如果值为 L 1 。我之所以停留在这里,是因为在我的实际数据中,有这么多列被命名为 titel_1, title_2,title_3, ... ,title_100 。因此,我无法键入每一列来执行此操作。因此,我需要适用于具有多个列的数据的代码。

    1 回复  |  直到 3 年前
        1
  •  2
  •   Kra.P    3 年前

    你可以试试

    library(dplyr)
    df %>%
      mutate(across(everything(), ~replace(., . ==  "", 0)),
             across(everything(), ~replace(., . ==  "H", 3)),
             across(everything(), ~replace(., . ==  "M", 2)),
             across(everything(), ~replace(., . ==  "L", 1))
             )
    
      id title_1 title_2 title_3
    1  1       3       2       3
    2  1       2       2       3
    3  3       0       0       2
    4  4       2       1       1
    5  5       1       1       0
    6  6       1       1       2
    7  7       3       3       2
    
        2
  •  1
  •   Maurits Evers    3 年前

    dplyr::recode

    df %>%
        mutate(across(starts_with("title"), recode, "L" = 1, "M" = 2, "H" = 3, .default = 0))
    #  id title_1 title_2 title_3
    #1  1       3       2       3
    #2  1       2       2       3
    #3  3       0       0       2
    #4  4       2       1       1
    #5  5       1       1       0
    #6  6       1       1       2
    #7  7       3       3       2