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

以另一个变量为条件向变量值添加后缀

  •  0
  • a_todd12  · 技术社区  · 2 年前

    给定以下数据,根据“type”的值向变量“var”添加后缀的最简单方法是什么?例如,如果type=“white”,则在var的每个值的末尾添加“_t”,如果type=“black”,则添加“_b”。

    structure(list(var = c("test", "test", "score", "score", "base", 
    "base"), type = c("white", "black", "white", "black", "white", 
    "black")), row.names = c(NA, -6L), spec = structure(list(cols = list(
        var = structure(list(), class = c("collector_character", 
        "collector")), type = structure(list(), class = c("collector_character", 
        "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), delim = ","), class = "col_spec"), problems = <pointer: 0x0000024d0c9a2b10>, class = c("spec_tbl_df", 
    "tbl_df", "tbl", "data.frame"))
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   TimTeaFan    2 年前

    我们可以使用 dplyr::case_when() :

    library(tidyverse)
    
    dat %>% 
      mutate(var = case_when(type == "white" ~ paste0(var, "_t"),
                             type == "black" ~ paste0(var, "_b"))
             )
    #> # A tibble: 6 × 2
    #>   var     type 
    #>   <chr>   <chr>
    #> 1 test_t  white
    #> 2 test_b  black
    #> 3 score_t white
    #> 4 score_b black
    #> 5 base_t  white
    #> 6 base_b  black
    

    来自OP的数据

    dat <- structure(list(var = c("test", "test", "score", "score", "base", 
                           "base"),
                   type = c("white", "black", "white", "black", "white", 
                                             "black")),
              row.names = c(NA, -6L),
              class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"))
    

    创建于2023-02-20 reprex v2.0.2

        2
  •  1
  •   akrun    2 年前

    另一个选项 tidyverse

    library(dplyr)
    library(stringr)
    df1 %>% 
      mutate(var = str_c(var, substr(str_replace(type, "^w", "t"), 1, 1), sep = '_'))
    

    -输出

    # A tibble: 6 × 2
      var     type 
      <chr>   <chr>
    1 test_t  white
    2 test_b  black
    3 score_t white
    4 score_b black
    5 base_t  white
    6 base_b  black