使用dplyr添加前缀,重命名除id列以外的所有列

dojqjjoe  于 2023-02-10  发布在  其他
关注(0)|答案(2)|浏览(138)

我有一个列id、feature_1、feature_2、feature_3的 Dataframe ,如下所示。

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中表示什么?提前感谢!

0sgqnhkj

0sgqnhkj1#

library(dplyr)

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

rename_with的第三个参数是.cols,您可以在其中使用tidyselect语法来选择列。
根据注解,.语法是比编写匿名函数更干净/更简单的风格,但您可以通过以下方式等效地完成此操作:

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

nbewdwxp2#

names(df) <- paste0("Source_", names(df))

这是解决方案的模型。要将修改应用于名称子集,请使用索引,如下所示

i <- grep("feature", names(df))
names(df)[i] <-  paste0("Source_", names(df)[i])

在这里,i是一个要修改的名称的索引数组,它是如何创建的并不重要,但是当条件基于名称本身时,grep是一个很好的方法。

相关问题