Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 3.1.0函数,用于获取具有NA值的列的平均值_R_Csv - Fatal编程技术网

R 3.1.0函数,用于获取具有NA值的列的平均值

R 3.1.0函数,用于获取具有NA值的列的平均值,r,csv,R,Csv,我有一组CSV文件。每个CSV文件上都有一个唯一的ID,以及其他列,如“日期”、“硫酸盐”、“硝酸盐”。这是关于空气污染的数据 该函数必须使用3个参数:“目录”、“污染物”、“id” 这是原始数据格式(对于001.csv文件): 这是我目前的职能: pollutantmean <- function (directory, pollutant, id = 1:332){ files_full <- list.files (directory, full.names = TRUE)

我有一组CSV文件。每个CSV文件上都有一个唯一的ID,以及其他列,如“日期”、“硫酸盐”、“硝酸盐”。这是关于空气污染的数据

该函数必须使用3个参数:“目录”、“污染物”、“id”

这是原始数据格式(对于001.csv文件):

这是我目前的职能:

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

pollutanmean我发现你的代码有两个问题

  • list.files只列出您的文件。它不会将文件读取到工作空间

  • 在子设置data.frame时,必须将列名指定为字符。 例如:dat[,“列名称”]

  • 我已经为你修改了函数,试试这个

        pollutantmean <- function (directory, pollutant, id = 1:332){
          files_full <- list.files (directory, full.names = TRUE)
          dat <- data.frame()
          for (i in id){
    
            dat <- rbind (dat, read.table(files_full[i],sep="",.......))
          }
          datasub <- dat[,"pollutant"]
    
      }
    

    污染指数1。我想您的意思是用户输入了
    pollutanmean(“specdata”,“norate”,70:72)
    ——列名的适当大小写。2:
    70:72
    与示例数据不符。3:(最后但并非最不重要)你是取两列的平均值。你不是想根据用户为第二个参数输入的内容进行过滤吗?@MatthewLundberg 1。csv文件中的列名为“硝酸盐”,不带大写字母。2.格式化数据的示例仅适用于文件:001.csv。他们将070.csv的数据格式化为示例,但在ID列中显示70。3.过滤器将是第二个和第三个参数。平均值仅为一列,即“硝酸盐”或“硫酸盐”列,但在它被ID列子集之前(例如csv文件的编号)。谢谢。你实际上并没有在任何地方读取数据。您只需输入
    文件的字符串值\u full
    ,没有read.table。如果这是针对Coursera课程的,那么对于这个简单的任务,已经有数百个问题被问到了。尝试搜索
    [r]硝酸盐
    [r]332
    @MrFlick是的,这是coursera类的。糟糕的是,我忘记了这一行:当你看你的函数时,你认为它应该返回什么?默认情况下,R将返回函数中计算的最后一个对象。最后一条语句是赋值,赋值实际上返回右边的值,但不可见(返回的是值,但除非显式打印,否则不会看到)。您可以删除分配以仅返回dat的污染物列,或添加另一行,仅使用
    datasub
    返回该值。非常感谢!但是我在您的代码中得到了这个错误:read.table(files_full[i],sep=“”,…):找不到对象“….”为什么?请解释一下。这是在输入:pollutanmean(“specdata”,“sulfate”,1:40)Hi时,通过“…”我的意思是“等等”,也就是说,您可以编写您想要的其他参数。这并不意味着要写。。。。。希望您能理解。@user2743244。。。我有这样的代码:read.table命令中的pollutanmean write argument header=TRUE。如果使用.csv文件,则必须添加sep=“,”。所有这些都是非常基本的事情。Read.table函数的阅读帮助。
    Error in `[.data.frame`(dat, , pollutant) : undefined columns selected 
    
     In addition: Warning messages:
    1: In `[<-.factor`(`*tmp*`, ri, value = "specdata/071.csv") :
      invalid factor level, NA generated
    2: In `[<-.factor`(`*tmp*`, ri, value = "specdata/072.csv") :
      invalid factor level, NA generated
    
        pollutantmean <- function (directory, pollutant, id = 1:332){
          files_full <- list.files (directory, full.names = TRUE)
          dat <- data.frame()
          for (i in id){
    
            dat <- rbind (dat, read.table(files_full[i],sep="",.......))
          }
          datasub <- dat[,"pollutant"]
    
      }
    
        pollutantmean <- function (directory, pollutant, id = 1:332){
          library(data.table)
    
          files_full <- list.files (directory, full.names = TRUE)
          dat_list <- list()
          for (i in id){
    
            dat_list[[i]] <- fread(files_full[i],sep="",.......)
          }
          dat <- rbindlist(dat_list)
          return(mean(dat[,pollutant]))
    
      }