如何在1个功能中对2个参数进行子集化

时间:2018-12-05 03:43:42

标签: r function subset data-science

我正在尝试解决一个问题,遇到一堵砖墙。我正在尝试根据给定的特定污染物名称和ID号来查找一组数据的平均值。因此,我认为一直到for循环的代码都可以正常工作。我创建了一个带有3个参数的函数,创建一个空的data.frame,然后将所有文件绑定到一个名为“ dat”的变量中。

现在,我正在尝试通过“ id”和特定的污染物名称(其中有两个分别命名为硫酸盐和硝酸盐)来对这些新的绑定数据进行子集化。如您所见,for循环下的代码一团糟。

具体来说,我不确定如何在一个“哪个”函数中将两个参数/参数子集化,因此我尝试为每个参数/参数分别创建一个。我当时想我可以使用中位数函数来找到两者之间的均值。

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

 subset_id <-dat[which(dat[, "id"] ==id) , ]
 subset_poll <-dat[which(dat[, "pollutant"] ==pollutant) , ]
 median(subset_id)
}

这是R中头/尾数据的样子的照片。enter image description here

编辑1:因此,我能够初始化该函数(正确的术语?),但是当我尝试使用输入运行该函数时,会得到许多“未定义的列已选择”。

pollutantmean <- function(directory, pollutant, ID = 1:332) {
 files_list <- list.files(directory, full.names = TRUE)
   dat <- data.frame()
   for (i in 1:332) {
   dat <- rbind(dat, read.csv(files_list[1]))
  }
   subset_id <- dat[which(dat[, "ID"] == ID & dat[, "pollutant"] == 
      pollutant) ]
       median(subset_id[, "pollutant"], na.rm = TRUE)
  }

该函数可以很好地放入内存,但是当我尝试输入参数“ pollutantmean(” specdata“,” sulfate“,1:10)”时,出现以下错误。

  Error in `[.data.frame`(dat, , "pollutant") : undefined columns selected
 In addition: Warning message:
 In dat[, "ID"] == ID :


 Error in `[.data.frame`(dat, , "pollutant") : undefined columns selected 

1 个答案:

答案 0 :(得分:0)

我能够在一些外部帮助下解决此问题。

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

      mean(dat[!is.na(dat[, "ID"]),pollutant], na.rm = TRUE)
 }