在R中,如何从CSV文件名中删除一些不需要的字符并提取日期?
我有一个文件夹,其中包含大约2000个csv,文件名中包含字符“在R中,如何从CSV文件名中删除一些不需要的字符并提取日期?,r,dataframe,R,Dataframe,我有一个文件夹,其中包含大约2000个csv,文件名中包含字符“[]”-例如:[住宅]20151001\u 0000\u 1.csv 我想: 从名称中删除“[]”,这样我们的文件名为: 住宅区\u 20151001\u 0000\u 1.csv 并将新文件放置在新文件夹中 在跳过每个文件的第一行后,将在一个数据帧(无标题)中读取该新文件夹中的所有文件 同时在新向量as列表中提取20151001作为日期(例如2015-10-01),以便新向量为: 文件名日期 住宅区\u 20151001\u 0
[]
”-例如:[住宅]20151001\u 0000\u 1.csv
我想:
- 从名称中删除“[]”,这样我们的文件名为: 住宅区\u 20151001\u 0000\u 1.csv 并将新文件放置在新文件夹中
- 在跳过每个文件的第一行后,将在一个数据帧(无标题)中读取该新文件夹中的所有文件
- 同时在新向量as列表中提取20151001作为日期(例如2015-10-01),以便新向量为: 文件名日期 住宅区\u 20151001\u 0000\u 1.csv 2015-10-01
- 在谷歌搜索
我发现:。这应该会让你为这个问题做好准备r后,替换字符串的一部分
- 要跳过第一行,请阅读
的文档。您将在那里找到read.csv
参数skip
- 请查看
/strftime
功能。或者,查看一下润滑油strftime
lubridate
[]
的所有csv
复制到另一个文件夹来创建备份。例如,如果您的csv
位于目录“/Users/xxxx/Desktop/Sub”
,我们将把它们复制到文件夹Backup
所以,
library(stringr)
library(tools)
setwd("/Users/xxxx/Desktop/Sub")
dir.create("Backup")
files<-data.frame(file=list.files(path=".", pattern = "*.csv"))
for (f in files)
file.copy(from= file.path("/Users/xxxx/Desktop/Sub", files$file), to= "/Users/xxxx/Desktop/Sub/Backup")
现在让我们重命名文件以删除“[]”。这里的想法是用名称替换文件:
for ( f in files$file)
file.rename(from=file.path("/Users/xxxx/Desktop/Sub", files$file),
to=file.path("/Users/xxxx/Desktop/Sub",files$Name))
您现在已重命名文件。如果运行:list.files(path=“.”,pattern=“*.csv”)
您将获得新文件:
"Residential_20150928_0000_4.csv"
"Residential_20151001_0000_1.csv"
"Residential_20151101_0000_3.csv"
"Residential_20151121_0000_2.csv"
"Residential_20151231_0000_5.csv"
试试看 是的,Akrun,因为它们都与一个大问题相关,转换文件名,存储在单独的文件夹中,读取到不应该有标题的数据框中,并在读取时跳过每个CSV的第一行。这听起来很像你希望SO社区为你做你的工作……好吧,伙计们,别这么认为。。。如果你帮不上忙,至少不要说我希望别人做我的工作。如果我能自己做的话,我就不会在stackoverflow上发布我的问题。我需要帮助,非常感谢你的想法,否则,你可以随身携带。你受到了一些批评@ManojKumar,因为你问的问题在谷歌上比较容易。我添加了一个关于如何查找所需信息的答案。lubridate函数可以处理数据,而不是文件名。谢谢保罗的帮助。我不太明白你在这里的意思
lubridate
包含可以将字符串文件名转换为日期对象的函数。要使此代码直接为您工作,只需更改工作目录以适合您的目录并执行即可。享受:)谢谢汤姆·马克斯。我在上面。如果有任何问题,将恢复。我在$newname文件行中稍微更改了我的代码。不要忘记包。使用的包是“stringr”和“tools”。我使用了以下函数:files$NewName1
for ( f in files$file)
file.rename(from=file.path("/Users/xxxx/Desktop/Sub", files$file),
to=file.path("/Users/xxxx/Desktop/Sub",files$Name))
"Residential_20150928_0000_4.csv"
"Residential_20151001_0000_1.csv"
"Residential_20151101_0000_3.csv"
"Residential_20151121_0000_2.csv"
"Residential_20151231_0000_5.csv"