【问题标题】:Error when using dplyr rename_at and stringr str_replace together to rename columns一起使用 dplyr rename_at 和 stringr str_replace 重命名列时出错
【发布时间】:2021-09-02 10:34:37
【问题描述】:

我想使用 str_replace 重命名几个具有特定前缀的变量。 我遇到了下面 REPREX 描述的问题:

test <- tibble::tribble(~pre_a, ~pre_b, ~c,
                       1,2,3,
                       4,5,6)
test %>%dplyr::rename_at(., dplyr::vars(starts_with('pre')), 
                         stringr::str_replace(., pattern = 'pre', replacement ='PRE'))

错误:

get(.x, .env, mode = "function") 中的错误:对象 'c(1, 4)' of 未找到模式“功能”另外:警告消息:在 stri_replace_first_regex(字符串,模式, fix_replacement(replacement), : 参数不是原子向量; 胁迫

问题仅在于 str_replace,因为如果我是基本 R 函数,它将起作用:

test %>%dplyr::rename_at(., dplyr::vars(starts_with('pre')), toupper)

注意:我不只是想转换成大写,所以我需要使用 str_replace 函数。

【问题讨论】:

    标签: r tidyverse stringr


    【解决方案1】:

    在使用自定义函数时,您需要使用~ 表示法。

    library(dplyr)
    
    test %>% 
      dplyr::rename_at(dplyr::vars(starts_with('pre')), 
                      ~stringr::str_replace(., pattern = 'pre', replacement ='PRE'))
    
    

    此外,rename_at 现在也替换为 rename_with

    test %>% 
      dplyr::rename_with(~stringr::str_replace(.,pattern = 'pre',replacement ='PRE'),
                         dplyr::starts_with('pre'))
    
    # A tibble: 2 x 3
    #  PRE_a PRE_b     c
    #  <dbl> <dbl> <dbl>
    #1     1     2     3
    #2     4     5     6
    

    【讨论】:

      猜你喜欢
      • 2018-07-19
      • 2023-02-23
      • 1970-01-01
      • 2019-01-25
      • 1970-01-01
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多