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

4
我需要用readxl::read_excel()将一堆.xlsx文件读入R。这些文件中的第一列没有给出变量名。由于有很多文件,我不想手动更改它们。
为了正确处理数据,有必要给这些第一列命名。最终,我希望编写一个函数,可以为每个.xlsx文件调用该函数(例如使用purrr:map),并在此函数中,我希望得到一个单独的管道作为解决方案。
不幸的是,dplyr::rename(df, timeseries = ``)会抛出以下错误:

Error: attempt to use zero-length variable name

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

Error: Arguments to rename() must be unquoted variable names. Argument timeseries is not.

如何避免打断管道以便通过names(df)[1] <- "timeseries"重命名变量?
2个回答

4
可以通过以下方式使用dplyr::select()实现:
select(df, timeseries = 1, everything())

显然,dplyr::select() 可以处理列索引,这使得这个解决方案成为可能。
如果您知道任何特定原因导致 dplyr:rename() 无法实现,请在评论中说明!

1
如果您想使用rename和列索引(在本例中为1),可以执行以下操作:
rename_(df, timeseries = names(df)[1])

在链式编程中,使用点号:“.”。
df %>% ... %>% rename_(timeseries = names(.)[1])

感谢您提出这种替代方法,尽管由于“(.)[1]”而感觉有点难以阅读。 - der_grund
没问题,只是想强调如何使用 rename 来实现。 select 会导致数据框中的列重新排列,所以如果出现问题,你可以编写一个包装函数来避免使用 (.) 语法。 - konvas
好的观点。在这里重新排列不是问题,但一般情况下可能会有问题。+1 - der_grund

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接