【问题标题】:Make readxl::read_excel rename only the second duplicate column in R使 readxl::read_excel 仅重命名 R 中的第二个重复列
【发布时间】:2020-11-17 02:20:51
【问题描述】:

在 readr 中,read_csv 命令通过重命名第二个重复的列名来处理重复的列名,并使第一个保持不变。请参阅以下示例,取自 https://github.com/tidyverse/readxl/issues/53

readr::read_csv("x,x,y\n1,2,3\n")
#> Warning: Duplicated column names deduplicated: 'x' => 'x_1' [2]
#> # A tibble: 1 × 3
#>       x   x_1     y
#>   <int> <int> <int>
#> 1     1     2     3

我怎样才能让readxl::read_excel 以同样的方式处理重复的列?

【问题讨论】:

    标签: r readr readxl


    【解决方案1】:

    您可以使用.name_repair 参数并将make.unique() 作为函数传递:

    library(readxl)
    
    read_excel(path = "temp.xlsx", .name_repair = ~make.unique(.x, sep = "_"))
    
    # A tibble: 1 x 3
          x   x_1     y
      <dbl> <dbl> <dbl>
    1     1     2     3
    

    【讨论】:

    • 这符合我的要求,但它有一个不好的副作用。我的实际 Excel 文件有空白列(我无法控制)。因此,它将第一个空白列命名为空字符串,这会导致 dplyr 出现问题。我可以使用select(-"") 。修复,但我只是好奇,是否可以在读入时预先解决这个问题?
    • 您可以将空列重命名为在读入时更易于识别的名称(例如,它们变为 ("blank"、"blank_1") 等 - 然后您可以使用 @987654325 轻松删除它们@. 这就是你的想法吗?
    • 有点。我认为您仍在描述读入后的重命名,这似乎完全可行,但我仍然对它是否可以作为读入函数调用本身的一部分进行学术好奇。
    • 不完全是 - 重命名是使用名称修复读取的一部分。 read_excel(path = "temp.xlsx", .name_repair = ~make.unique(sub("^$", "blank", .x), sep = "_")) %&gt;% select(-starts_with("blank"))
    猜你喜欢
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 2021-03-16
    • 2012-11-28
    相关资源
    最近更新 更多