我真的是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 票数:1

您在这里犯了几个错误。 错误#1:函数Dataframe没有返回值。 错误消息2:使用lapply ,结果是一个列表。 因此, x是数据帧的list (而不是?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)

因此,与使用初始化值0相比,这不会影响mean函数。

希望这可以帮助!!

  ask by user3552857 translate from so

未解决问题?本站智能推荐: