作为具有列[id],[complete.cases值]的表的文件夹中每个文件中的complete.cases的值

时间:2017-04-17 10:24:11

标签: r function

一个文件夹有几十个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范围内所有文件的完整案例总数绑定在一起。

1 个答案:

答案 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)
}