我想编写一个函数来导入一堆csv文件并对其进行清理。其中一个清理函数涉及从csv文件名中提取年份并将其粘贴到列名称中,使用dplyr rename()。但出现某种原因它不能工作。我正在努力找出原因。
以下是一个简单的示例:
问题似乎出在
以下是一个简单的示例:
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不接受new_name
的输入来自paste0
。