通过使用dplyr添加前缀来重命名除id列之外的所有列

我有一个包含 id、feature_1、feature_2、feature_3 列的数据框,如下所示。

df = data.frame(
  id = sample(letters, 5),
  feature_1 = sample(1:10, 5),
  feature_2 = runif(5),
  feature_3 = rnorm(5)
)

我想通过添加前缀来重命名所有特征列。以下行不起作用并输出错误。

df %>%
  rename_with(~(ifelse(names(.x) == "id", paste0("source_", names(.x)), "id")))

Error in names[cols] <- .fn(names[cols], ...) : 
  replacement has length zero

关于如何修改这个的任何提示?.x 在 rename_with 中代表什么?提前致谢!

回答

library(dplyr)

df %>% 
  dplyr::rename_with(~ paste0("source_", .), -id)

的第三个参数rename_with.cols,您可以在其中使用tidyselect语法来选择列。此处-id不包括此列。


根据注释,.语法比编写匿名函数更简洁/更简单,但您可以等效地完成此操作:

df %>% 
  dplyr::rename_with(function(x) paste0("source_", x), -id)


以上是通过使用dplyr添加前缀来重命名除id列之外的所有列的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>