重命名不适用于以两个点开头的列名

Renaming doesn't work for column names starting with two dots

我更新了 tidyverse,我的 read_excel() 函数(来自 readxl)也发生了变化。没有标题的列现在称为 ..1..2 等,而它们以前称为 X__1X__2.

我正在尝试 rename() 这些列以两个点开头,但我收到一条错误消息。

这是一个例子:

library(tidyverse)

df <- tibble(a = 1:3,
             ..1 = 4:6)

df <- df %>% 
  rename(b = ..1)

抛出错误:

Error in .f(.x[[i]], ...) : 
  ..1 used in an incorrect context, no ... to look in

如果我在名称周围使用反引号,我会得到同样的错误:rename(b = `..1`)

..1 是 R 中的保留字。参见 help("reserved")help("..1")。尝试引用它:

df %>% rename(b = "..1")

给予:

# A tibble: 3 x 2
      a     b
  <int> <int>
1     1     4
2     2     5
3     3     6

janitor package 有一个非常方便的函数 clean_names 可以完成这样的任务。在这种情况下,它会将来自 readxl 的任何 .. 替换为 x。我添加了另一个 .. 列来显示替换的工作原理。

library(tidyverse)

df <- tibble(a = 1:3,
             ..1 = 4:6,
             ..5 = 10:12)

df %>% 
  janitor::clean_names()
#> # A tibble: 3 x 3
#>       a    x1    x5
#>   <int> <int> <int>
#> 1     1     4    10
#> 2     2     5    11
#> 3     3     6    12

readxl 中的命名设置似乎是一个有争议的话题:请参阅 this issue, among others on the best way to convert unusable names from Excel sheets. There's also a vignette。老实说,最近几次我需要弄乱 readxl 名称,我只是将数据框传递给 janitor.