通过使用 dplyr 添加前缀重命名除 id 列之外的所有列
Rename all columns except id column by adding a prefix using dplyr
我有一个数据框,其列 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
关于如何修改这个的任何提示? rename_with里面的.x代表什么?提前致谢!
names(df) <- paste0("Source_", names(df))
这是解决方案的模型。要将修改应用于名称的子集,请使用索引,如
i <- grep("feature", names(df))
names(df)[i] <- paste0("Source_", names(df)[i])
这里,i
是要修改的名字的索引数组。它是如何创建的并不重要,但是当标准基于名称本身时,grep
是一个很好的方法。
library(dplyr)
df %>%
dplyr::rename_with(~ paste0("source_", .), -id)
rename_with
的第三个参数是 .cols
,您可以在其中对 select 列使用 tidyselect 语法。这里 -id
排除了这一列。
根据评论,.
语法是一种 cleaner/simpler 风格,而不是编写匿名函数,但您可以等效地完成此操作:
df %>%
dplyr::rename_with(function(x) paste0("source_", x), -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
关于如何修改这个的任何提示? rename_with里面的.x代表什么?提前致谢!
names(df) <- paste0("Source_", names(df))
这是解决方案的模型。要将修改应用于名称的子集,请使用索引,如
i <- grep("feature", names(df))
names(df)[i] <- paste0("Source_", names(df)[i])
这里,i
是要修改的名字的索引数组。它是如何创建的并不重要,但是当标准基于名称本身时,grep
是一个很好的方法。
library(dplyr)
df %>%
dplyr::rename_with(~ paste0("source_", .), -id)
rename_with
的第三个参数是 .cols
,您可以在其中对 select 列使用 tidyselect 语法。这里 -id
排除了这一列。
根据评论,.
语法是一种 cleaner/simpler 风格,而不是编写匿名函数,但您可以等效地完成此操作:
df %>%
dplyr::rename_with(function(x) paste0("source_", x), -id)