【问题标题】:Replace all underscores in feature names with a space用空格替换功能名称中的所有下划线
【发布时间】:2026-01-13 02:35:01
【问题描述】:

我想用空格替换数据框特征名称中的所有下划线:

library(tidyverse)
names <- c("a_nice_day", "quick_brown_fox", "blah_ha_ha")
example_df <- data.frame(
  x = 1:3,
  y = LETTERS[1:3],
  z = 4:6
)
names(example_df) <- names

试过了:

example_df %>% rename_all(replace = c("_" = " "))
Error: `.funs` must specify a renaming function

也试过了:

example_df %>% rename_all(funs(replace = c("_" = " ")))
Error: `nm` must be `NULL` or a character vector the same length as `x`

如何用空格替换功能名称中的所有下划线?

【问题讨论】:

  • 您希望列名包含空格?对于处理数据来说,这通常是一个非常糟糕的主意。在使用 mutate() 等时,必须引用列名变得更加混乱。你确定你需要那个吗?
  • 名称不允许包含空格。见Variable name restrictions in R
  • @MrFlick 明白了,但对于这个特殊的用例,它用于传递给 ggplot 并使用 str_wrap 以便列标签可读:)
  • @DougFir 好吧,既然这确实是一个 ggplot 问题,您可能应该从该代码开始。改变 ggplot 对象的比例可能比改变数据本身更容易。
  • @MrFlick 感谢您的提示。对于更多上下文,我拥有的是一个使用 group by 的 dplyr 链,然后是相当多的聚合函数 sum、count 等。这些新创建的功能都有下划线来代替空格。然后,我将此 df 传递给 ggplot 并使用构面网格,因此我在函数中创建的名称在构面网格生成的所有图表中看起来都过于拥挤。因此,在将“_”替换为“”之后,我打算在 df 功能名称上使用 str_wrp()。这里有更标准的方法吗?

标签: r dplyr


【解决方案1】:

怎么样:

example_df %>% select_all(funs(gsub("_", " ", .)))

输出:

  a nice day quick brown fox blah ha ha
1          1               A          4
2          2               B          5
3          3               C          6

您也可以使用rename,但在这种情况下,您需要以不同的方式调用它:

example_df %>% rename_all(function(x) gsub("_", " ", x))

或者简单地说:

example_df %>% rename_all(~ gsub("_", " ", .))

【讨论】:

    【解决方案2】:

    使用基础 R:

    colnames(example_df) <- gsub("_", " ", colnames(example_df))
    

    【讨论】: