R脚本帮助 - 存储列表示来自多个CSV文件

时间:2014-07-16 20:19:27

标签: r csv

我正在努力学习R,而我在完成当前的任务时遇到了困难,我认为有人可能会有一些见解或建议来帮助我从逻辑上思考。

我有一个包含多个CSV文件的目录,每个文件代表一个单独的生态测量日。每天(文件)测量/变量是相同的,因此每个CSV具有相同的标题,但每个变量包含数百个独特的观察结果。

我试图写一个小脚本:

读取目录中的文件列表,逐个加载每个文件,同时取一个特定列的平均值,然后将该均值和关联日期存储在新数据框中

然后我想绘制日期和平均值,看看平均值是如何随时间变化的。

有关如何最好地完成此任务的任何建议?

这是我的工作尝试:

dir <- getwd()
file.ls <- list.files(dir, full.names = T)
count <- length(file.ls)
all.means <- data.frame()
data <- data.frame()
for(i in 1:count){
   data <- read.csv(file.ls[i])
   date <- data[2,1]
   means <- mean(data$total_con)
   all.means[i] <- cbind(all.means, date, means)
}

plot(all.means$date, all.means$means)

1 个答案:

答案 0 :(得分:0)

你问题的缺失成分是“每个文件如何告诉你它的日期?”我假设你有一些命名约定,如mydata_yyyy-mm-dd.csv

以下代码可以适用于:

library(plyr)  # provides ldply
data.file.names <- dir(pattern="^mydata") # reads just the data files
X <- ldply(data.file.names, function(fn) {
  dat <- read.csv(fn)  # read the file
  this.date <- strptime(substring(fn, 8, 17), "%Y-%m-%d")  # parse the date from the file name
  this.mean <- mean(dat[,n.col.of.interest])  # calculate the stat of interest
  return(data.frame(date.of.experiment=this.date, measurement=this.mean))  # return one row
})

然后您可以绘制或以其他方式使用数据。