【问题标题】:Reading multiple files in R as string in a for.loop在for.loop中将R中的多个文件作为字符串读取
【发布时间】:2020-03-20 05:28:46
【问题描述】:

我有一个代码在执行时从一个文件夹中读取两个不同的 csv 文件。我需要在这种情况下使用 for 循环多次执行此操作并将输出写入“bsc_.csv”形式的单独 csv 文件。两个输入 csv 文件的文件格式是“base_.csv”和“fut_.csv”。这些文件是递增编号的,这就是我需要迭代的模式。下面附上示例代码。

library('CDFt')
d1<-read.csv("base1.csv",header=TRUE)
d2<-read.csv("fut1.csv",header=TRUE)
A1<-d1[,2]
A2<-d1[,3]
A3<-d2[,2]
CT<-CDFt(A1,A2,A3)
x<-CT$x
FGp<-CT$FGp
FGf<-CT$FGf
FRp<-CT$FRp
FRf<-CT$FRf
ds<-CT$DS
d<-round(ds,3)
dat<-replace(d,d<0,0)
write.table(dat,"bsc1.csv", row.names=F,na="NA",append=T, quote= FALSE, sep=",", col.names=F)

【问题讨论】:

  • 问题出在哪里?如果您收到错误,查看这些错误(或警告或其他)的逐字文本会有所帮助。如果输出没有错误但仍然不正确,我们仍然需要信息。
  • 作为一个初学者,我不知道如何在这段代码中使用 for 循环。
  • 您展示的任何内容都不是可循环的。需要循环遍历不同的目录吗?
  • 在一个目录中,我有名为 base1.csv、base2.csv、base3.csv、fut1.csv、fut2.csv、fut3.csv 的 csv 文件。在执行代码时,它会读取示例代码中提到的 base1.csv 和 fut1.csv,并将输出写入 bsc1.csv。我想创建一个 for 循环,在读取 base2.csv、fut2.csv 和 base3.csv、fut3.csv 文件时再执行两次此代码。请告诉我如何进行。
  • 你真的应该编辑你的问题。虽然您的代码确实包含fut1.csv,但您从未提及文件是递增编号的事实,而这正是您需要迭代的模式。

标签: r csv lapply


【解决方案1】:

试试这个(未经测试):

bases <- list.files(pattern = "base[0-9]*\\.csv$")
futs <- list.files(pattern = "fut[0-9]*\\.csv$")

mismatches <- setdiff(gsub("^base", "", bases), gsub("^fut", "", futs) )
if (length(mismatches)) {
  warning("'bases' files not in 'futs': ", paste(sQuote(mismatches), collapse = ", "))
  bases <- setdiff(bases, paste0("base", mismatches))
}
# and the reverse
mismatches <- setdiff(gsub("^fut", "", futs), gsub("^base", "", bases) )
if (length(mismatches)) {
  warning("'futs' files not in 'bases': ", paste(sQuote(mismatches), collapse = ", "))
  futs <- setdiff(futs, paste0("fut", mismatches))
}

ign <- Map(function(fb, ff) {
  bdat <- read.csv(fb, header = TRUE)
  fdat <- read.csv(ff, header = TRUE)
  # ...
  newfn <- gsub("^base", "bsc", fb)
  write.table(dat, newfn, ...)
}, bases, futs)

【讨论】:

    猜你喜欢
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多