【发布时间】:2021-07-28 23:41:19
【问题描述】:
我正在尝试构建一个导入一堆 csv 文件并清理它们的函数。其中一个清理功能涉及使用 dplyr rename() 从 csv 文件名中提取年份并将其粘贴到列名中。由于某种原因,它不起作用。我正在尝试找出原因。
这是一个简单的例子:
df <- data.frame('value' = 1:5)
df
value
1 1
2 2
3 3
4 4
5 5
但是,当我尝试重命名时:
rename(df, paste0('value', '_', gsub('([a-z]+_)|(\\.csv)', '', 'csv_2018.csv')) = 'value')
投掷:
Error: unexpected '=' in "rename(df, paste0('value', '_', gsub('([a-z]+_)|(\\.csv)', '', 'csv_2018.csv')) ="
值得注意的是,这很好用:
paste0('value', '_', gsub('([a-z]+_)|(\\.csv)', '', 'csv_2018.csv'))
[1] "value_2018"
这也很好用:
rename(df, 'value_2018' = 'value')
value_2018
1 1
2 2
3 3
4 4
5 5
问题似乎出在paste0()(而不是gsub()),因为这也不起作用:
rename(df, paste0('value', '_') = 'value')
抛出同样的错误:
Error: unexpected '=' in "rename(df, paste0('value', '_') ="
显然:paste0('value', '_') 可以给予:"value_"
我可以通过其他方式解决这个问题,但想知道为什么 dplyr 不接受 paste0 作为new_name 的输入。
【问题讨论】: