【问题标题】:R script help - storing column means from multiple CSV filesR 脚本帮助 - 存储来自多个 CSV 文件的列均值
【发布时间】:2014-07-16 20:19:26
【问题描述】:

我正在尝试学习 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)

【问题讨论】:

  • 您应该首先查看?list.files?read.csv 并将它们合并到您的代码中。然后,如果您遇到困难并且无法找到解决方案,您可以使用问题的reproducible example 更新您的问题,即数据、代码和您遇到的问题的描述。

标签: r csv


【解决方案1】:

您的问题缺少的部分是“每个文件如何告诉您它的日期?”我假设您有一些命名约定,例如 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
})

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

【讨论】:

  • 感谢polimath。日期存储在每个文件的列中(同一日期在列的整个长度上重复)。我在代码中添加了我的第一次尝试,因此您可以看到我的“逻辑”。
猜你喜欢
  • 2017-06-02
  • 1970-01-01
  • 2016-02-27
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
相关资源
最近更新 更多