Loops csv文件组合中特定列的平均值

Loops csv文件组合中特定列的平均值,loops,mean,lapply,Loops,Mean,Lapply,我真的是R的新手。如果能得到任何帮助,我将不胜感激 我有很多文件需要合并为一个数据帧,然后得到第2列或第3列的平均值。我试过了,但我觉得我犯了一些愚蠢的错误,或者可能完全错了 polmean <- function(directory, pol, id = 1:3) { Dataframe <- function (id) { Filenames <- list.files (pattern = "*.csv") R

我真的是R的新手。如果能得到任何帮助,我将不胜感激

我有很多文件需要合并为一个数据帧,然后得到第2列或第3列的平均值。我试过了,但我觉得我犯了一些愚蠢的错误,或者可能完全错了

polmean <- function(directory, pol, id = 1:3) {
     Dataframe <- function (id) {
             Filenames <- list.files (pattern = "*.csv")
             Reqfiles <- Filenames [id]
             LoadReqfiles <- lapply(Reqfiles, read.csv)
             }
     x <- Dataframe (id)
     Colomnmeans <- function (pol, removeNA = TRUE) {             
             means <- 0
             if (pol == "sulfate") {
             means <- mean (x[,2], na.rm = removeNA)
             } else {
             means <- mean (x[,3], na.rm = removeNA)
             }
              means
             }
     Colomnmeans (pol, removeNA = TRUE)
     }     

polmean您在这里犯了几个错误。
错误#1:函数
Dataframe
未返回值。(见下文) 错误2:当您使用
lappy
时,结果是一个列表。因此,
x
是数据帧的
列表(而不是
?data.frame
)。因此,您将无法访问数据帧列表中的不同列。您必须在数据帧上循环

所以试试这个:

polmean <- function(directory, pol, id = 1:3) {
  Dataframe <- function (id) {
    Filenames <- list.files(directory,pattern=".csv",full.names=TRUE)
    Reqfiles <- Filenames[id]
    LoadReqfiles <- lapply(Reqfiles, read.csv)
    return(LoadReqfiles)  # Mistake1: Need to return the value
  }
  x <- Dataframe(id)
  Colomnmeans <- function (pol, removeNA = TRUE) {             
    means <- NULL
    if (pol == "sulfate") {
      for(i in 1:length(x)) means <- c(means,x[[i]][,2])      
    } else {
      for(i in 1:length(x)) means <- c(means,x[[i]][,3])
    }
    mean(means, na.rm = TRUE)
  }
  Colomnmeans(pol, removeNA = TRUE)
}     
因此,这不会影响
mean
的功能,而不是使用
0
的初始化值

希望这有帮助

length(NULL)