【问题标题】:Renaming an unnamed variable with dplyr使用 dplyr 重命名未命名的变量
【发布时间】:2017-06-10 16:22:09
【问题描述】:

我必须将一堆.xlsx 文件读入R,我使用readxl::read_excel()。这些文件中的每一个都没有为第一列提供变量名称。由于文件很多,我不想手动更改。

为了正确处理数据,有必要给这些第一列命名。最后,我想编写一个函数,我可以为这些 .xlsx 文件中的每一个调用(例如使用 purrr:map),并且在这个函数中,我更愿意使用单个管道作为解决方案。

不幸的是,dplyr::rename(df, timeseries = ``) 抛出以下错误:

错误:尝试使用零长度变量名

使用列索引 (dplyr::rename(df, timeseries = 1)) 也不起作用:

错误:rename() 的参数必须是不带引号的变量名。 参数timeseries 不是。

如何避免中断管道以通过names(df)[1] <- "timeseries" 重命名变量?

【问题讨论】:

    标签: r dplyr rename


    【解决方案1】:

    这可以通过dplyr::select() 以下列方式完成:

    select(df, timeseries = 1, everything())
    

    显然,dplyr::select() 可以处理列索引,这允许这种解决方案。

    如果您知道dplyr:rename() 无法做到这一点的任何特殊原因,请发表评论!

    【讨论】:

      【解决方案2】:

      如果你想使用rename和一个列索引(在本例中为1),你可以这样做

      rename_(df, timeseries = names(df)[1])
      

      链接时,使用点:

      df %>% ... %>% rename_(timeseries = names(.)[1])
      

      【讨论】:

      • 感谢您提出这种替代方法,尽管由于(.)[1] 感觉有点难以阅读。
      • 没有问题,只是想强调一下如何使用renameselect 的副作用是它会重新排列数据框中的列,因此如果出现问题,您可以在 rename 周围编写一个包装函数以避免 (.) 语法
      • 好点。重新排列在这里不是问题,但总的来说可能是。 +1
      猜你喜欢
      • 1970-01-01
      • 2021-10-22
      • 2018-02-02
      • 2018-09-13
      • 1970-01-01
      • 2018-07-04
      • 2018-05-06
      • 2016-10-02
      • 2019-05-10
      相关资源
      最近更新 更多