【发布时间】:2020-05-18 12:51:23
【问题描述】:
我正在尝试用一些 R tidyverse 函数替换 for 循环。
我有一系列名称为:OQ1、OQ2、OQ3.... OQ45
我想把他们的名字改成OQ_45_1,OQ_45_2...OQ_45_45
我已经使用 for 循环完成了,但有没有使用管道 %>%?
【问题讨论】:
我正在尝试用一些 R tidyverse 函数替换 for 循环。
我有一系列名称为:OQ1、OQ2、OQ3.... OQ45
我想把他们的名字改成OQ_45_1,OQ_45_2...OQ_45_45
我已经使用 for 循环完成了,但有没有使用管道 %>%?
【问题讨论】:
我们可以使用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 <- paste0("OQ",1:20) (t_vec <- str_replace(n_vec, pattern = "OQ", replacement = "OQ_45_"))
如果您需要更改的所有列都以“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 创建
【讨论】:
我们可以使用str_c
library(dplyr)
library(stringr)
library(dplyr)
df %>%
rename_at(vars(starts_with('OQ')), ~str_c('OQ_45_', seq_along(.)))
【讨论】: