代码之家  ›  专栏  ›  技术社区  ›  Indrajeet Patil

使用'case\u when'和'str\u split'组合来改变数据帧[duplicate]中的列

  •  0
  • Indrajeet Patil  · 技术社区  · 7 年前

    我试图用感兴趣的包中的函数名创建一个dataframe。我通过以下方式做到了这一点:

    # loading needed libraries
    library(ggstatsplot)
    library(tidyverse)
    
    # creating a dataframe with namespace from package of interest
    (
      df_ns <- getNamespaceExports(ns = "ggstatsplot") %>%
        tibble::as_data_frame(.) %>%
        dplyr::filter(.data = ., grepl("^gg|^grouped", value)) %>%
        dplyr::filter(.data = ., value != "ggcoefstats") %>%
        dplyr::mutate(
          .data = .,
          functions = paste("ggstatsplot::", value, sep = "")
        ) %>%
        dplyr::mutate(
          .data = .,
          version = dplyr::case_when(grepl("^grouped", value) ~ "grouped",
                                     TRUE ~ "basic")
        )
    )
    #> # A tibble: 10 x 3
    #>    value                  functions                           version
    #>    <chr>                  <chr>                               <chr>  
    #>  1 grouped_gghistostats   ggstatsplot::grouped_gghistostats   grouped
    #>  2 grouped_ggscatterstats ggstatsplot::grouped_ggscatterstats grouped
    #>  3 grouped_ggbetweenstats ggstatsplot::grouped_ggbetweenstats grouped
    #>  4 grouped_ggcorrmat      ggstatsplot::grouped_ggcorrmat      grouped
    #>  5 grouped_ggpiestats     ggstatsplot::grouped_ggpiestats     grouped
    #>  6 ggbetweenstats         ggstatsplot::ggbetweenstats         basic  
    #>  7 ggpiestats             ggstatsplot::ggpiestats             basic  
    #>  8 ggcorrmat              ggstatsplot::ggcorrmat              basic  
    #>  9 gghistostats           ggstatsplot::gghistostats           basic  
    #> 10 ggscatterstats         ggstatsplot::ggscatterstats         basic
    

    到现在为止,一直都还不错。现在我想要的是:
    我想移除 grouped_ value . 但是当我试着用 str_split ,所有名称都被分配 "gghistostats"

    # stripping `grouped_` prefix from `value` column
    df_ns %>%
      dplyr::mutate(
        .data = .,
        value = dplyr::case_when(
          grepl("^grouped", value) ~ stringr::str_split(value, "_")[[1]][[2]],
          TRUE ~ value
        )
      )
    #> # A tibble: 10 x 3
    #>    value          functions                           version
    #>    <chr>          <chr>                               <chr>  
    #>  1 gghistostats   ggstatsplot::grouped_gghistostats   grouped
    #>  2 gghistostats   ggstatsplot::grouped_ggscatterstats grouped
    #>  3 gghistostats   ggstatsplot::grouped_ggbetweenstats grouped
    #>  4 gghistostats   ggstatsplot::grouped_ggcorrmat      grouped
    #>  5 gghistostats   ggstatsplot::grouped_ggpiestats     grouped
    #>  6 ggbetweenstats ggstatsplot::ggbetweenstats         basic  
    #>  7 ggpiestats     ggstatsplot::ggpiestats             basic  
    #>  8 ggcorrmat      ggstatsplot::ggcorrmat              basic  
    #>  9 gghistostats   ggstatsplot::gghistostats           basic  
    #> 10 ggscatterstats ggstatsplot::ggscatterstats         basic
    

    reprex package

    2 回复  |  直到 7 年前
        1
  •  1
  •   akrun    7 年前

    我们可以用 str_remove

    library(stringr)
    library(dplyr)
    df_ns %>%
         mutate(value = str_remove(value, "^grouped_"))
    
        2
  •  1
  •   Tim Biegeleisen    7 年前

    尝试使用 sub

    df_ns$value <- sub("^grouped_", "", df_ns$value)
    

    或使用捕获组:

    df_ns$value <- sub("^grouped_(.*)", "\\1", df_ns$value, perl=TRUE)
    
    推荐文章