【问题标题】:reading csv files in a for loop and assigning dataframe names [duplicate]在for循环中读取csv文件并分配数据框名称[重复]
【发布时间】:2011-07-21 18:07:47
【问题描述】:

可能重复:
Read multiple CSV files into separate data frames

我需要从一个文件夹中将许多 csv 文件读入数据帧。 csv 文件名的格式为 fxpair-yyyy-mm.csv(例如 AUDJPY-2009-05.csv)。我想读取所有 csv 文件并创建 fxpair.yyyy.mm

形式的数据框

我无法在循环中创建用于从 read.csv 语句分配的数据框名称

filenames <- list.files(path=getwd())  
numfiles <- length(filenames)  

#fx.data.frames to hold names that will be assigned to csv files in csv.read
fx.data.frames <- gsub(pattern="-",x=filenames,replacement=".")  
fx.data.frames <- gsub(pattern=".csv",x=fx.data.frames,replacement="")

i <-1  
for (i in c(1:numfiles)){  
   filenames[i] <- paste(".\\",filenames[i],sep="")  
   fx.data.frames[i] <- read.csv(filenames[i], header=FALSE)
}

csv.read 似乎工作正常,但我无法按照我想要的方式创建数据框对象。我只是想要一些方法来命名基于文件名以 fxpair.yyyy.mm 格式读取的数据帧。

我错过了什么明显的东西吗?谢谢你的帮助!!

【问题讨论】:

  • 另见另一个涉及将多个文本文件读入 R goo.gl/jM1J7 的 stackoverflow 问题。请记住,在 R 中处理数据帧列表比将每个文件写入不同的数据帧更容易,因为处理变得更容易。
  • 附注:在 R 中你不必初始化 i,你可以使用 for (i in 1:numfiles) 并删除 c。更好的是,只需在循环中使用for (i in filenames),就可以省去很多麻烦。
  • 很好的提示,谢谢你们!很有帮助。

标签: r for-loop


【解决方案1】:

只是为了说明我的评论:

for (i in filenames){  
   name <- gsub("-",".",i)
   name <- gsub(".csv","",name)  
   i <- paste(".\\",i,sep="")
   assign(name,read.csv(i, header=FALSE)
}

或者,将所有数据帧保存在一个列表中:

All <- lapply(filenames,function(i){
    i <- paste(".\\",i,sep="")
    read.csv(i, header=FALSE)
})
filenames <- gsub("-",".",filenames)
names(All) <- gsub(".csv","",filenames)

我会选择第二种解决方案,因为我喜欢使用列表。之后清理工作区的麻烦更少。您还可以摆脱全球环境中的namei 混乱。如果你不小心的话,这些可能会在后面的代码中引起一些有趣的错误。另见Is R's apply family more than syntactic sugar?

【讨论】:

    【解决方案2】:

    这个怎么样:

    for (i in c(1:numfiles)){  
        filenames[i] <- paste(".\\",filenames[i],sep="")  
        assign(gsub("[.]csv$","",filenames[i]),read.csv(filenames[i], header=FALSE))
    }
    

    【讨论】:

    • 抱歉,我对 R 比较陌生,但我不明白这是如何创建名为 fxpair.yyyy.mm 的数据帧的。我插入了这段代码,运行了它,然后尝试了一个 ls() 以确保所有的 csv 文件都以正确命名的数据帧的形式出现,但除了“文件名”、“fx.data.frames”和“i”之外什么都不存在。谢谢。
    猜你喜欢
    • 2021-10-07
    • 2019-11-10
    • 2021-09-15
    • 2020-11-05
    • 1970-01-01
    • 2021-12-25
    • 2019-09-25
    • 2021-09-19
    • 2022-12-20
    相关资源
    最近更新 更多