【问题标题】:Building a mean across several csv files在多个 csv 文件中建立平均值
【发布时间】:2014-10-23 21:31:53
【问题描述】:

我在 Coursera 上有一个作业,但我被卡住了 - 我不一定需要或想要一个完整的答案(因为这会作弊),但我们非常感谢您提供正确方向的提示。

我在一个文件夹中有 300 多个 CSV 文件(名为 001.csv、002.csv 等)。每个都包含一个带有标题的数据帧。我正在编写一个函数,它将接受三个参数:文件的位置、要计算平均值的列的名称(在数据框内)和 要在计算中使用的文件(id)

我尽量保持简单:

pm <- function(directory, pollutant, id = 1:332) {

setwd("C:/Users/cw/Documents")
setwd(directory)

files <<- list.files()

首先,设置wd,获取所有文件的列表

x <- id[1] 
x

获取用户指定ID的起点。

问题

for (i in x:length(id)) {
df <- rep(NA, length(id))
df[i] <- lapply(files[i], read.csv, header=T)
result <- do.call(rbind, df)
return(df)
}
}

所以这就是我碰壁的地方:我需要从上面获取用户指定的输入(例如 10:25)并将文件“010.csv”到“025.csv”中的内容放入数据框实际得出一个特定列的平均值。

所以我的想法是从指定 id 的起点开始沿着 id 的长度(例如 16 表示 10:25)运行一个 for 循环。在这个循环中,我需要将files 的适当值作为read.csv 的输入,并将.csv 文件的内容放入数据框中。

我可以获取单个 .csv 文件并将它们放入数据框中,但不是多个。

有没有人提示我如何进行?

【问题讨论】:

标签: r csv


【解决方案1】:

根据您的示例,例如10:25 的 16 个文件,即 010.csv、011.csv、012.csv 等。 假设您的命名约定遵循目录中文件的顺序,您可以尝试:

csvFiles <- list.files(pattern="\\.csv")[10:15]#here [10:15] ... in production use your function parameter here 
file_list <- vector('list', length=length(csvFiles)) 
df_list <- lapply(X=csvFiles, read.csv, header=TRUE) 
names(df_list) <- csvFiles #OPTIONAL: if you want to rename (later rows) to the csv list
df <- do.call("rbind", df_list)
mean(df[ ,"columnName"])

这些代码 sn-ps 应该可以拉皮条并融入您的日常工作。

【讨论】:

  • 谢谢 - 这非常有帮助 - 特别是 list.files 命令与 [id] 相结合 - 应该考虑一下我自己..
【解决方案2】:

您可以像这样将 csv 文件聚合到一张大表中:

for(i in 100:250)
{
    infile<-paste("C:/Users/cw/Documents/",i,".csv",sep="")
    newtable<-read.csv(infile)
    newtable<-cbind(newtable,rep(i,dim(newtable)[1])    # if you want to be able to identify tables after they are aggregated
    bigtable<-rbind(bigtable,newtable)
}

(您必须将100:250 替换为用户指定的输入)。

那么,计算你想要的应该不是很难。

这不适用于文件 001 到 099,您必须将它们与其他文件区分开来,因为它是“0”,但只需稍加处理即可修复。

【讨论】:

    【解决方案3】:

    为什么lapplyfor 循环中?只需执行lapply(files[files %in% paste0(id, ".csv")], read.csv, header=T)

    他们还应该教你不要使用&lt;&lt;-

    【讨论】:

      猜你喜欢
      • 2015-06-30
      • 1970-01-01
      • 2016-06-26
      • 1970-01-01
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      相关资源
      最近更新 更多