计算多个.csv文件中一列的平均值如何?

时间:2017-01-29 19:20:17

标签: r

我是R的新手,必须从332个文件中计算列#start_date的平均值。下面的平均公式适用于1档。当我尝试跨文件计算时出现问题。

也许阅读所有文件并将其存储在sulf中效果不佳?你能救我吗?

非常感谢

mydata

2 个答案:

答案 0 :(得分:0)

未经测试,但步骤如下。另请注意,这类问题一再被问到(例如here)。尝试搜索"处理多个文件","批处理","导入许多文件"或类似的东西。

lx <- list.files(pattern = ".csv", full.names = TRUE)

# gives you a list of 
xy <- sapply(lx, FUN = function(x) {
  out <- read.csv(x)
  out <- out[, "sulfate", drop = FALSE] # do not drop to vector just for fun
  out <- out[is.na(out[, "sulfate"]), ]
  out
  }, simplify = FALSE)

xy <- do.call(rbind, xy) # combine the result for all files into one big data.frame
mean(xy[, "sulfate"]) # calculate the mean
# or
summary(xy)

如果您的RAM不足,可以稍微优化一下。

答案 1 :(得分:0)

谢谢你的帮助。

我把它整理出来了。关键是在list.files和rbind(mydata,...)中使用full.names = TRUE,否则它会一个接一个地读取文件并且不会将它们追加到彼此之后,这是我的目标

见下文。我不确定它是否是最“R”解决方案,但它可以正常工作

       pollutantmean<-function(directory,pollutant,id=1:332){
         files_list <- list.files(directory, full.names=TRUE)   
         mydata <- data.frame()
            for (i in id) {                                
            mydata <- rbind(mydata, read.csv(files_list[i]))
            }


              if(pollutant %in% "sulfate")
                 {
                  mean(mydata$sulfate,na.rm=TRUE)

                   }
               else
                 {if(pollutant %in% "nitrate")
            {
            mean(mydata$nitrate,na.rm=TRUE)
            }
           else
            {"wrong pollutant"  
            }  
          }
         }

`