在R中,如何从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

我有一个文件夹,其中包含大约2000个csv,文件名中包含字符“
[]
”-例如:
[住宅]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"