【问题标题】:dplyr - Rename column [EMPTY] created by readrdplyr - 重命名由 readr 创建的列 [EMPTY]
【发布时间】:2026-02-04 20:20:06
【问题描述】:

使用readr_0.1.1 读取缺少字段名称的.csv 文件时,名称会自动设置为[EMPTY]

library("readr")
library("dplyr")
df <- read_csv(",foo\n1,bar")

> names(df)
[1] "[EMPTY]" "foo" 

我正在尝试使用 dplyr_0.4.2 重命名 "[EMPTY]",但我找不到正确的解决方案。

我试过了:

> rename(df, baz = [EMPTY])
Error: unexpected '[' in "rename(df, baz = ["

> rename_(df, "baz" = "[EMPTY]")
Error in parse(text = x) : <text>:1:1: unexpected '['
1: [
    ^

正确的做法是什么?

【问题讨论】:

  • 您的意思是缺少列名吗?我试图用缺少的列名来复制它,我得到了NA 的列名。你能展示一个可重现的例子吗?
  • 上面的例子是可重现的例子(前三行代码)。你没有得到一个第一列名为“[EMPTY]”的数据框吗?
  • 我的意思是你拥有的数据集。我创建了一些数据,但无法获得 [EMPTY]
  • 我拥有的数据集存储在我正在读取的 .csv 中。第一行以“,”开头,即缺少第一行(标题)的第一个元素。 .csv 与我的示例中的字符串具有相同的结构。
  • rename(df, baz = `[EMPTY]`) 为我工作

标签: r dplyr readr


【解决方案1】:

你可以使用

dplyr::rename(df, baz = `[EMPTY]`)

我们使用的是反引号,而不是引号,因为我们指的是“非标准变量名称”,例如:

df$`[EMPTY]`

来自?Quotes

标识符由一系列字母、数字、句点 (.) 和下划线。它们不能以数字或下划线开头, 也不是句点后跟一个数字。保留字无效 标识符。

字母的定义取决于当前的语言环境,但仅限于 ASCII 数字被认为是数字。

此类标识符也称为句法名称,可以使用 直接在R代码中。几乎总是可以使用其他名称,前提是 他们被引用。首选引号是反引号 (`),并且 deparse 通常会使用它,但在许多情况下单或双 可以使用引号(因为字符常量通常会转换为 一个名字)。

【讨论】: