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

时间:2014-04-19 23:34:16

标签: loops mean lapply

我真的是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)
     }     

这给了我一个错误:x [,2]维数不正确。

由于

1 个答案:

答案 0 :(得分:1)

你在这里犯了几个错误。 错误#1:函数Dataframe未返回值。 (见下文) 错误#2:当您使用lapply时,结果是一个列表。因此,xlist个数据框(而不是?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)
}     

请注意,在上面的代码中,我使用的初始化值为NULL,这是一个零长度向量。尝试:

length(NULL)

所以这不会使mean的功能变得混乱,而不是使用0的初始化值。

希望这会有所帮助!!