【发布时间】:2015-04-20 14:44:24
【问题描述】:
我正在尝试编写一个函数,该函数将返回跨多个 .csv 文件的列的平均值。但是,该函数似乎卡在我的平均计算上,因为它返回 NA 值:
pollutantmean <- function(directory, pollutant, id = 1:332){
dy <- list.files("specdata", full.names = T)
df <- data.frame()
for(i in id){
rbind(df,read.csv(dy[i]))
}
if(pollutant == "nitrate"){mean(df$nitrate, na.rm = TRUE)}
if(pollutant == "sulfate"){mean(df$sulfate, na.rm = TRUE)}
}
非常感谢您提出解决此问题的建议。
【问题讨论】:
-
你肯定可以在这里找到有用的链接:stackoverflow.com/search?tab=newest&q=[r]%20pollutantmean
-
我相信 read.csv 的默认行为是忽略标题。如果它没有得到名字,那么它就不会知道 df$nitrate 是什么。也许尝试将
header = T添加到 read.csv 部分? -
@goodtimeslim 它确实得到了
header。head(read.csv('001.csv'),2) # Date sulfate nitrate ID 1 2003-01-01 NA NA 1 2 2003-01-02 NA NA 1 -
我认为你在 for 循环中需要
df <- rbind(df,read.csv(dy[i])),在 return(mean(df$nitrate...`) 中需要return -
修复后尝试使用
spec文件夹的功能..pollutantmean('nitrate', 1:2)#[1] 0.9038795; df1 <- read.csv('001.csv'); df2 <- read.csv('002.csv'); dfN <- rbind(df1,df2); mean(dfN$nitrate, na.rm=TRUE)#[1] 0.9038795。在pollutantmean函数中,我没有使用目录,因为我使用 spec 文件夹作为工作目录。