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

时间:2019-03-14 13:16:28

标签: r dplyr readxl

我更新了read_excel(),我的readxl函数(来自..1)也已更改。没有标题的列现在称为..2X__1,以此类推,以前称为X__2rename()

我正在尝试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`)

如果在名称str上加上反引号,则会出现相同的错误。

2 个答案:

答案 0 :(得分:2)

..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

答案 1 :(得分:2)

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问题,以及有关从Excel工作表转换不可用名称的最佳方法等信息。上面还有一个vignette。老实说,最近几次我需要弄乱readxl名称,我只是将数据帧传递给janitor