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))
我正在尝试重命名数据中的所有列 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))