这是我的示例data.frame
df <- tibble(
ID = 1:3,
col_x = LETTERS[1:3],
col_q = letters[1:3],
col_w = 3:1
)
> df
# A tibble: 3 Ã 4
ID col_x col_q col_w
<int> <chr> <chr> <int>
1 1 A a 3
2 2 B b 2
3 3 C c 1
我想通过附加列索引(不包括ID列)来重命名除ID列之外的所有列。所需输出:
ID col_x1 col_q2 col_w3
<int> <chr> <chr> <int>
1 1 A a 3
2 2 B b 2
3 3 C c 1
(我会删除原件
x
,
q
,
w
在随后的步骤中)。我尝试过:
df %>% rename_with(~paste0(.x, 1), .cols = -ID) # Works
df %>% rename_with(~paste0(.x, col_number()), .cols = -ID) # Does nothing
df %>% rename_with(~paste0(.x, col_number()-1), .cols = -ID) # Error: non-numeric argument to binary operator
我在写这篇文章的时候突然想到
col_number()
来自
readr
不像
row_number()
来自
dplyr
-所以我在期待
col_number()
表现得像
row_number()
。既然如此,我如何在不必拼写中的每个密钥对的情况下实现这一点
rename
,例如。
rename(col_x1 = col_x, col_q2 = col_q, col_w3 = col_w)
?
编辑
:
df %>% rename_with(~paste0(.x, 1:3), .cols = -ID)
实现了我想要的,但列的数量不是固定的(可能超过3),因此需要一个动态解决方案。