首页 > 解决方案 > 重命名不适用于以两个点开头的列名

问题描述

我更新了tidyverse我的read_excel()功能(来自readxl)也发生了变化。没有标题的列现在称为..1,..2以此类推,以前称为X__1, X__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`)

标签: rdplyrreadxl

解决方案


这个janitor有一个非常方便的功能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是一个有争议的话题:请参阅问题以及其他有关从 Excel 工作表转换不可用名称的最佳方法。上面还有一个小插曲。老实说,最近几次我需要弄乱readxl名称,我只是将数据框传递给janitor.


推荐阅读