使用 dplyr 重命名未命名的变量

Posted

技术标签:

【中文标题】使用 dplyr 重命名未命名的变量【英文标题】:Renaming an unnamed variable with 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" 重命名变量?

【问题讨论】:

【参考方案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

以上是关于使用 dplyr 重命名未命名的变量的主要内容,如果未能解决你的问题,请参考以下文章

使用 dplyr 重命名变量 [重复]

Dplyr 使用字符串变量作为表达式重命名

R dplyr:使用字符串函数重命名变量

在dplyr中,如何删除和重命名不存在的列,操作所有名称,并使用字符串命名新变量?

R语言dplyr包select函数rename函数dataframe变量抽取及重命名实战

根据向量new_varname,old_varname重命名dplyr中的变量名[重复]