让我首先描述一下我的功能和我要处理的事情。
基本上,这个文件夹包含大约300个逗号分隔的值文件。每个文件都有一个与其关联的ID,就像200.csv中的ID 200,并包含一些有关硫酸盐和硝酸盐污染物的数据。我要做的是计算这些粒子的平均值,无论是一个ID还是一个ID的范围。例如,计算ID 5的硫酸平均值,或计算ID 5:10的相同内容。
这是我处理数据的过程,但最后我得到了一个愚蠢的错误。
现在这个函数非常简单。我定义了spectate,定义了for循环来计算每个id的数据。在运行函数时,我不会出错。但有一个错误是最后一个障碍。
"specdata“中的”'Error“,”硫酸盐“:当我执行函数时,不正确的维度数。有人能详细说明一下吗?
发布于 2015-02-17 09:56:37
我认为这是plyr函数非常有用的一种任务。更具体地说,我认为您应该使用ldply和一个定制的函数。
ldply:在列表中作为输入,数据作为输出。列表应该是目录内容,输出将是每个csv文件的摘要值。
您的示例不是完全可复制的,因此下面的代码只是一个示例结构:
require(plyr)
require(stringr)
files_to_extract <- list.files("dir_with_files", pattern=".csv$")
files_to_extract <- str_sub_replace(files_to_extract, ".csv$", "")
fn <- function(this_file_name){
file_loc <- paste0(dir_with_files, "/", this_file_name, ".csv")
full_data <- read.csv(file_loc)
out <- data.frame(
variable_name=this_file_name,
variable_summary= mean(full_data$variable_to_summarise)
)
return(out)
}
summarised_output <- ldply(files_to_extract, fn)希望这能有所帮助。可能第一次无法工作,您可能需要添加一些附加条件等来处理不具有预期内容的文件。很乐意讨论它正在做什么,但最好读一读这,因为一旦您了解了这种方法,就会使各种任务变得更容易。
https://stackoverflow.com/questions/28558533
复制相似问题