我有一个文件名列表,上面有总标题
a_file_name_1
a_file_name_34
a_file_name_452
new_data_2018.csv
我想重命名new_data_2018.csv
文件,使其数字结尾比文件夹中预先存在的最大文件大1。
到目前为止
#list files in directory
list_files_names <- list.files(directory_2018)
#capture largest suffix
largest_value <-
new_largest_value <- largest_value + 1
# rename file
file.rename("new_data_2018.csv", paste0('a_file_name_', new_largest_value)
我的问题是,我如何收集现有的文件名,以这种方式返回最大的后缀。我想这可能与正则表达式有关,下面的正则表达式可能有用[0-9]*$
。
6条答案
按热度按时间r1wp621o1#
你可以解析数字,选择最大的一个,然后加上+1:
如果你的文件中有其他数字,你可以使用一些正则表达式,或者只是用下划线分割它,然后将最后一个元素转换为数字:
或者使用正则表达式:
r8uurelv2#
使用tidyr:
注意:这取决于文件名中没有不需要的数字。示例:
将返回:234222
EDIT-如果您现有的文件名中有一致的年份,则可以使用以下方法:
注意:当您的文件编号包含2018时,这可能会遇到问题。
li9yvcax3#
OP
[0-9]*$
提出的正则表达式指向正确的方向,因为它将在字符串的最后选择零个或多个数字。* 关键部分 * 是$
,它指定 * 一行末尾的匹配 。(有趣的是,$
在迄今为止发布的所有其他答案中都被从正则表达式中省略了)。为了安全起见,我建议使用
[0-9]+$
,它在字符串的最后选择一个或多个数字。 没有必要 * 重命名像new_data_2018.csv
这样的文件,它们之间包含一个数字,但不是在最后。那么,利用
代码
计算
其可用于构造新的文件名。
整个过程可以写成一个管道:
ulmd4ohb4#
zy1mlcev5#
将零添加到文件名中的数字,然后按文件名降序排序。
顶部文件名将包含最大值。
os8fio9y6#
另一种方法是在文件夹中保存一个特殊的文本文件,该文件夹仅保存最后使用的数字。然后每次向文件夹中添加新文件时读取并递增编号。这是获得最大使用值的更快方法,特别是如果文件夹中有数千个文件。这也是一个不那么复杂的解决方案。