【问题标题】:In R - Reading fixed number of csv files from folder and create dataframe based on selected files在 R - 从文件夹中读取固定数量的 csv 文件并根据所选文件创建数据框
【发布时间】:2016-07-02 08:39:18
【问题描述】:

问题:

我有一个包含 168 个 csv 文件的文件夹。每个 csv 有 200 个观察值(为简单起见,假设其中只有一个变量 x)。每个文件都是每小时和 7 天的观察记录(即 24 x 7 = 168 个文件)。

我想要什么:

读取 24 个文件(一天)并创建一个数据框。然后对接下来的 24 个文件重复该过程。这样,我们最终会得到 7 个数据帧(每天一个),每个数据帧将有 200 x 24 = 4800 个观察值。

我尝试了什么:

setwd('/data/')
temp = list.files(pattern="*.csv")

for(i in seq(from=1, to=168, by=24)){
  data <- temp[i : i+23] %>% 
     lapply(read.csv, skip=1, header=FALSE) %>% 
     bind_rows   
assign ( paste0("df_",i,sep=""), data)
rm(data)
}

结果:

但我未能在每个 df 中获得 4800 个观察值。 相反,它只给我 200 个 obs。在每个df中。 (例如 df_1 : 200 obs) 我做错了什么??有人可以帮忙吗?

【问题讨论】:

  • 我怀疑您在这里使用管道对您没有多大帮助,并且可能会增加混乱。
  • 我不确定,雅普。但是在循环之外,在单个文件夹上,这个管道运行良好。

标签: r loops csv dataframe


【解决方案1】:

试试这个: 我尝试了 14 个 csv 文件,其中包含 200 个观察结果。

files <- list.files(pattern = "*.csv")
segments <- pls::cvsegments(168, k=24, type="consecutive")
newFileList <- lapply(segments, function(f){
    data.table::rbindlist(lapply(files[f], function(x){
        read.csv(x, skip = 1, header = FALSE)
    }))
})

【讨论】:

  • 感谢 TheRimalaya。我修改了这段代码。而不是 k=24,它应该是 k=7,我们得到 24 小时文件的片段。但“newFileList”是 7 个对象的列表。我想您应该已经完成​​了将列出的对象从 newFileList 检索到单个对象(数据帧)中的代码,即 File1、File2、.....File7。
【解决方案2】:

这是一个比 TheRimalaya 更简单的解决方案,无需额外的软件包。您只需要使用嵌套的 for 循环。

setwd('/data/')
temp = list.files(pattern="*.csv")
for(i in seq(from=1, to=168, by=24)){
    for(j in 0:23){
        # can add other csv options in the read.csv
        hour <- read.csv(temp[i+j],header=FALSE)
        # if first hour of a day, start new dataframe, else combine with previous hour 
        if(j==0) daydf <- hour else daydf <- rbind(daydf, hour) 
    }
assign(paste0("df_",i), daydf)
print(paste("Creating dataframe:",paste0("df_",i)))
}

这将创建七个数据帧:df_1、df_25、df_49 等。我尚未对此进行测试,但它应该可以工作。

【讨论】:

  • 非常感谢 winampman 的帮助。让我跑过去看看。
猜你喜欢
  • 1970-01-01
  • 2015-09-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
相关资源
最近更新 更多