通过R中的函数传递目录,然后为每个CSV文件存储变量?

时间:2014-09-11 23:00:29

标签: r variables csv directory

虽然我认为我很快就会成为R大师,但我最近的问题集是一个粗鲁的觉醒大声笑。在发布此问题之前,我已经搜索了这个社区并练习了各种教程。最后,我需要通过一个CSV文件目录并创建一个最终数据框,显示每个特定文件的完整案例数。因此,如果我想在目录中搜索文件[1:3],将显示一个数据框,显示每个特定文件1 - X,2 - Y,3 - Z的完整个案数。当我运行此代码时:< / p>

complete <- function(directory, id = 1:332) {
        files_list <- list.files(directory, full.names=TRUE)
        for(file in id){
                data <- data.frame()
                data <- rbind(data, read.csv(files_list[file], header=TRUE))
                nobs <- sum(complete.cases(data))


        }

        allnobs <- data.frame(id, nobs)
        allnobs


}

我收到一个data.frame,其中列出了每行ID中最终CSV文件的complete.cases数,而192应该只与ID 8配对,而其他每个ID都应该有自己唯一的完整案例数。我的结果为每个ID列出192:

> complete("specdata", 1:8)
  id nobs
1  1  192
2  2  192
3  3  192
4  4  192
5  5  192
6  6  192
7  7  192
8  8  192

我还尝试移动在for循环之外创建的原始data.frame:

complete <- function(directory, id = 1:332) {
        files_list <- list.files(directory, full.names=TRUE)
        data <- data.frame()
        for(file in id){
                data <- rbind(data, read.csv(files_list[file], header=TRUE))
                nobs <- sum(complete.cases(data))


        }

        allnobs <- data.frame(id, nobs)
        allnobs


}

- 这最终给了我在所有文件中观察到的total.cases总数:

> complete("specdata", 1:8)
  id nobs
1  1 3139
2  2 3139
3  3 3139
4  4 3139
5  5 3139
6  6 3139
7  7 3139
8  8 3139

非常感谢此处的任何帮助。

1 个答案:

答案 0 :(得分:0)

在这里:## dir是你的目录

complete<-function(dir,id)
{
  setwd("D:/R WD/assignment1")
  file_list <- list.files(dir, full.names = FALSE)
  setwd("D:/R WD/assignment1/specdata")

  nobs<-integer(length(id))
  p<- 1
  for(i in id)
  {
    data <- read.csv(file_list[i], header=TRUE)
    n<-sum(complete.cases(data))
    nobs[p]<-n
    p<-p+1
  }
  cbind(id,nobs)
}

输出:

> complete("specdata", 1:8)
     id nobs
[1,]  1  117
[2,]  2 1041
[3,]  3  243
[4,]  4  474
[5,]  5  402
[6,]  6  228
[7,]  7  442
[8,]  8  192

- 问候DUDU