Using ncol(.) argument in rename_with function gives error: Error in 2:ncol(.) : argument of length 0

Using ncol(.) argument in rename_with function gives error: Error in 2:ncol(.) : argument of length 0

我正在尝试重命名数据中的所有列 frame/tibble。

想法是给第一列一个 specific/dedicated 名称,然后给所有其他列一个“连续”的名称,最后一个下标。对于下标,我尝试使用ncol(.) 函数,但不断出现标题中提到的错误。

我在这里错过了什么?

library(tidyverse)
df <- data.frame(col1 = c(1, 2, 3),
                 col2 = c(1, 2, 3),
                 col3 = c(1, 2, 3)) %>%
  as_tibble() %>%
  rename_with(.cols = everything(),
              .fn   = ~c("new_col_1", paste0("test_", 2:ncol(.))))

# Error in 2:ncol(.) : argument of length 0

仅供参考,将上面的 2:ncol(.) 部分更改为 2:3 然后可以工作,但我想动态传递它。

这与 tidyverse 非标准评估有关。如果您想更改每一列的名称,您可以轻松地将 rename_with 与 base-R 的 setNames 函数交换(这恰好也很适合管道):

data.frame(col1 = c(1, 2, 3),
                 col2 = c(1, 2, 3),
                 col3 = c(1, 2, 3)) %>%
  setNames(c("new_col_1", paste0("test_", 2:ncol(.))))


# A tibble: 3 x 3
new_col_1 test_2 test_3
<dbl>  <dbl>  <dbl>
  1         1      1      1
  2         2      2      2
  3         3      3      3

在基础 R 中,您可以简单地使用:

colnames(df) <- paste0('test_', 1:ncol(df))