我有这个数据框,
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
我可以通过按位置重命名轻松完成。但是,我想知道如何使重命名可扩展,例如,我有数千列。
您可以使用
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 列