首页 文章

将CSV文件连接到R中的单个数据框中,为什么我在使用typeof时仍然将列表作为类?

提问于
浏览
3

这是包含所有CSV文件的specdata目录的zip文件:https://d396qusza40orc.cloudfront.net/rprog%2Fdata%2Fspecdata.zip

我正在尝试将所有文件放入数据框中,因此我可以使用complete.cases,此代码创建数据帧列表但不创建单个数据框,因此我在尝试使用complete.cases时遇到错误 . 我看着使用合并,但我似乎无法解决如何在多个文件的for循环中使用合并 . 我已经尝试实现rbind,我认为我接近这样做但我也似乎无法弄清楚如何在for循环中正确使用它 . 我是一个初学者,在我继续像lapply这样的矢量化函数之前,试图理解for循环 .

这是代码:

complete<- function(directory, id=1:332){
        data<-NULL
        for (i in 1:length(id)) {
                data[[i]]<- c(paste(directory, "/",formatC(id[i], width=3, flag=0),".csv",sep=""))     
        }
        cases<-NULL

        for (d in 1:length(data)) { 
                cases[[d]]<-c(read.csv(data[d]))
        }
        df<-NULL
        for (c in 1:length(cases)){
                df[[c]]<-(data.frame(cases[c]))
        }
        df

}

1 回答

  • 3

    首先要做的是删除for循环(如果你是初学者,那么只需直接进入apply系列,R中的for循环有时更容易,但apply系列是R方式) .

    files <- list.files()
    data <- lapply(files,function(x) read.csv(x))
    

    然后取决于你是否真的想要merge或rbind(因为它们不一样)

    data_rbind <- do.call("rbind", data)
    

    要么

    merge.df <- Reduce(function(x, y) merge(x, y, all=T,by="your_value",sort=F), data, accumulate=F)
    

相关问题