我正在尝试解决一个问题,遇到一堵砖墙。我正在尝试根据给定的特定污染物名称和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)
}
编辑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
答案 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)
}