问题:
我有一个包含168个csv文件的文件夹。每个csv有200个观察值(为简单起见,假设其中只有一个变量x)。每个文件都是每小时和七天的观察记录(即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只手。在每个df。 (例如df_1:200 obs) 我做错了什么?有人可以帮忙吗?
答案 0 :(得分:1)
试试这个: 我尝试了14个带有200个观测值的csv文件。
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)
}))
})
答案 1 :(得分:1)
这里的解决方案比TheRimalaya简单,不需要额外的套餐。您只需要使用嵌套的for循环。
<input id="Submit" name="Submit "type = "Submit" class="btn"/>
这将创建七个数据框:df_1,df_25,df_49等。我还没有对此进行测试,但它应该可以正常工作。