R - Dataframe 函数返回非数字或逻辑的方法

mbjcgjjk  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(101)

我是一个R初学者,正在进行R的自我教程和作业。我有一个CSV文件列表,从001.csv到332.csv。每个CSV有四列:日期,硫酸盐,硝酸盐和ID。我需要写一个函数来计算我们调用的这些文件的污染物的平均值。所以我有我的代码如下,

pollutantmean <- function (directory, pollutant, id = 1:332) { 
  ## read the files
  
  filenames <- sprintf("%03d.csv",id)
  filepath <- paste(directory, filenames, sep="/")
  
  ## create a data frame to store data     
  df <- lapply(filepath, read.csv)
  
  ## calculate the mean
  
  mean(df[[pollutant]], na.rm = TRUE)
}

字符串
一切都很好,直到最后的平均函数。当我输入"pollutantmean("specdata", "sulfate", 1:10)"时,
它返回
Warning message: In mean.default(df[[pollutant]], na.rm = TRUE) : argument is not numeric or logical: returning NA
我已经尝试类(df),并检查它是一个 Dataframe ,但不知道哪一部分,我错过了造成的df无法识别。我已经研究了几个小时,从不同的网站,但仍然无法得到的关键。希望有人可以帮助。

eh57zj3b

eh57zj3b1#

看起来问题是lapply返回了一个 Dataframe 列表,而你试图直接在列表上计算平均值。在计算平均值之前,你应该首先将这些 Dataframe 合并合并到一个对象中。
下面是你的函数的更新版本:

pollutantmean <- function(directory, pollutant, id = 1:332) {
  ## read the files
  filenames <- sprintf("%03d.csv", id)
  filepath <- paste(directory, filenames, sep="/")
  
  ## create a data frame to store data
  df_list <- lapply(filepath, read.csv)
  
  ## combine the data frames into a single data frame
  df <- do.call(rbind, df_list)
  
  ## calculate the mean
  result <- mean(df[[pollutant]], na.rm = TRUE)
  
  return(result)
}

字符串

相关问题