我是R的新手,必须从332个文件中计算列#start_date
的平均值。下面的平均公式适用于1档。当我尝试跨文件计算时出现问题。
也许阅读所有文件并将其存储在sulf
中效果不佳?你能救我吗?
非常感谢
mydata
答案 0 :(得分:0)
未经测试,但步骤如下。另请注意,这类问题一再被问到(例如here)。尝试搜索"处理多个文件","批处理","导入许多文件"或类似的东西。
lx <- list.files(pattern = ".csv", full.names = TRUE)
# gives you a list of
xy <- sapply(lx, FUN = function(x) {
out <- read.csv(x)
out <- out[, "sulfate", drop = FALSE] # do not drop to vector just for fun
out <- out[is.na(out[, "sulfate"]), ]
out
}, simplify = FALSE)
xy <- do.call(rbind, xy) # combine the result for all files into one big data.frame
mean(xy[, "sulfate"]) # calculate the mean
# or
summary(xy)
如果您的RAM不足,可以稍微优化一下。
答案 1 :(得分:0)
谢谢你的帮助。
我把它整理出来了。关键是在list.files和rbind(mydata,...)中使用full.names = TRUE,否则它会一个接一个地读取文件并且不会将它们追加到彼此之后,这是我的目标
见下文。我不确定它是否是最“R”解决方案,但它可以正常工作
pollutantmean<-function(directory,pollutant,id=1:332){
files_list <- list.files(directory, full.names=TRUE)
mydata <- data.frame()
for (i in id) {
mydata <- rbind(mydata, read.csv(files_list[i]))
}
if(pollutant %in% "sulfate")
{
mean(mydata$sulfate,na.rm=TRUE)
}
else
{if(pollutant %in% "nitrate")
{
mean(mydata$nitrate,na.rm=TRUE)
}
else
{"wrong pollutant"
}
}
}
`