一个文件夹有几十个csv文件。每个csv文件的命名范围仅为1 - 332.每个文件包含两列“硫酸盐”和“硝酸盐”,其中包含污染等级的数值。我想在一列中创建一个列出id(文件名为'id')的表,以及另一列中该文件中的完整个案数(作为'nobs')。
请建议修改以下代码(或全新的内容)
complete <- function(directory, id = 1:332) {
csvfiles <- dir(directory, "*\\.csv$", full.names = TRUE)
data <- lapply(csvfiles[id], read.csv)
for (filedata in data) {
d <- filedata[["sulfate"]]
d <- d[complete.cases(d)] # remove NA values
d1 <- filedata[["nitrate"]]
d1<- d1[complete.cases(d1)]
}
paste(id, (length(d)+length(d1)))
}
目前,上述代码只是将id号与该id范围内所有文件的完整案例总数绑定在一起。
答案 0 :(得分:0)
一些建议修改:
您可以在同一个函数中读入和处理csv文件。使用cbind
添加所需的2列。然后row将所有data.frames绑定到1 data.frame
complete <- function(directory, id = 1:332) {
lsData <- lapply(id, function(n) {
df <- read.csv(paste0(directory, "/", n, ".csv"))
cbind(id=n, df, nobs=nrow(df[complete.cases(df),,drop=FALSE]))
})
do.call(rbind, lsData)
}