根据向量重命名多个变量

问题描述 投票:0回答:1

我有这个数据框,

set.seed(123)
dataf <- data.frame( id = seq(1:5), 
                     A_1 = rnorm(5),
                     A_2 = rnorm(5),
                     A_3 = rnorm(5),
                     A_4 = rnorm(5),
                     A_5 = rnorm(5))

> dataf 
  id         A_1        A_2        A_3        A_4        A_5
1  1 -0.56047565  1.7150650  1.2240818  1.7869131 -1.0678237
2  2 -0.23017749  0.4609162  0.3598138  0.4978505 -0.2179749
3  3  1.55870831 -1.2650612  0.4007715 -1.9666172 -1.0260044
4  4  0.07050839 -0.6868529  0.1106827  0.7013559 -0.7288912
5  5  0.12928774 -0.4456620 -0.5558411 -0.4727914 -0.6250393

我有一个如下所示的向量,基于该向量,我想重命名上述数据框变量。

sep <- c(0, 1, 1, 0, 0)

在这个向量中,我有一个标记,应根据该标记来重命名变量。如果标记显示 0,则没有变化。如果标记为 1,我们会在变量名称中添加前缀,例如

_mod
。例如,
sep
的第二个元素是1,这意味着我需要将第二个变量
A_2
重命名为
A_2_mod
。结果表应如下所示:

  id         A_1    A_2_mod    A_3_mod        A_4        A_5
1  1 -0.56047565  1.7150650  1.2240818  1.7869131 -1.0678237
2  2 -0.23017749  0.4609162  0.3598138  0.4978505 -0.2179749
3  3  1.55870831 -1.2650612  0.4007715 -1.9666172 -1.0260044
4  4  0.07050839 -0.6868529  0.1106827  0.7013559 -0.7288912
5  5  0.12928774 -0.4456620 -0.5558411 -0.4727914 -0.6250393

我可以通过按位置重命名轻松完成。但是,我想知道如何使重命名可扩展,例如,我有数千列。

r dplyr data.table
1个回答
0
投票

您可以使用

dplyr::rename_with
来提供帮助。例如

dplyr::rename_with(dataf, 
   function(x) paste0(x, "_mod"), 
   .cols=num_range("A_", which(sep==1))
)

我使用

num_range()
tidyselect 助手仅选择
sep

中相应位置有 1 的 A 列
© www.soinside.com 2019 - 2024. All rights reserved.