使用 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]
感觉有点难以阅读。
没有问题,只是想强调一下如何使用rename
。 select
的副作用是它会重新排列数据框中的列,因此如果出现问题,您可以在 rename
周围编写一个包装函数以避免 (.)
语法
好点。重新排列在这里不是问题,但总的来说可能是。 +1以上是关于使用 dplyr 重命名未命名的变量的主要内容,如果未能解决你的问题,请参考以下文章
在dplyr中,如何删除和重命名不存在的列,操作所有名称,并使用字符串命名新变量?