【问题标题】:Is there any way using tidyverse R to change multiple column names by ascending series?有没有办法使用 tidyverse R 通过升序更改多个列名?
【发布时间】:2020-05-18 12:51:23
【问题描述】:

我正在尝试用一些 R tidyverse 函数替换 for 循环。 我有一系列名称为:OQ1、OQ2、OQ3.... OQ45 我想把他们的名字改成OQ_45_1,OQ_45_2...OQ_45_45

我已经使用 for 循环完成了,但有没有使用管道 %>%?

【问题讨论】:

    标签: r pipe tidyverse


    【解决方案1】:

    我们可以使用rename_at

    library(dplyr)
    df %>% rename_at(vars(starts_with('OQ')), ~paste0('OQ_45_', seq_along(.)))
    

    在基础 R 中,您可以使用

    cols <- grep('^OQ', names(df))
    names(df)[cols] <- paste0('OQ_45_', seq_along(cols))
    

    【讨论】:

    • 如果你的名字已经存储在向量中,n_vec &lt;- paste0("OQ",1:20) (t_vec &lt;- str_replace(n_vec, pattern = "OQ", replacement = "OQ_45_"))
    【解决方案2】:

    如果您需要更改的所有列都以“QO”开头,那么您可以使用 gsub 重命名_all。

    library(dplyr)
    
    tibble(OQ1 = NA, OQ2 = NA, OQ3 = NA) %>% 
      rename_all( ~ gsub("^OQ", "OQ_45_", .x))
    #> # A tibble: 1 x 3
    #>   OQ_45_1 OQ_45_2 OQ_45_3
    #>   <lgl>   <lgl>   <lgl>  
    #> 1 NA      NA      NA
    

    reprex package (v0.3.0) 于 2020-05-18 创建

    【讨论】:

      【解决方案3】:

      我们可以使用str_c

      library(dplyr)
      library(stringr)
      library(dplyr)
      df %>%
            rename_at(vars(starts_with('OQ')), ~str_c('OQ_45_', seq_along(.)))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-27
        • 2017-02-23
        • 1970-01-01
        • 1970-01-01
        • 2020-08-26
        • 2019-09-03
        • 1970-01-01
        • 2022-11-16
        相关资源
        最近更新 更多