【问题标题】:Delete csv files having less than 10 entries from a particular directory in R从 R 中的特定目录中删除条目少于 10 个的 csv 文件
【发布时间】:2014-06-16 10:26:33
【问题描述】:

我在特定目录中有大约 100 个 csv 文件,我想对所有文件使用移动平均预测。以下是我写的代码:

fileNames <- Sys.glob("*.csv")
for (fileName in fileNames) {      
  abc <- read.csv(fileName, header = TRUE, sep = ",")

  library(stats)
  library(graphics)
  library(forecast)
  library(TTR)
  library(zoo)
  library(tseries)

  abc1 = abc[,1]
  abc1 = t(t(abc1))
  abc1 = as.vector(abc1)

  abc2 = ts(abc1, frequency = 12,start = c(2014,1))
  abc_decompose = decompose(abc2)
  plot(abc_decompose)

  forecast = (abc_decompose$trend)
  x <- data.frame(abc, forecast)
  write.csv (x, file = fileName, row.names=FALSE, col.names=TRUE)
}

现在这段代码运行良好。它在每个 csv 文件中附加一个名为 forecast 的列,并在其中写入预测值。问题出在这 100 个 csv 文件中,有些文件太小,R 显示以下错误: Error in decompose(abc2) : time series has no or less than 2 periods

实际上,我对条目少于 10 个的文件不感兴趣,但手动删除这些文件很困难。请帮忙。

【问题讨论】:

    标签: r csv


    【解决方案1】:

    您可以计算 for 循环中每个 csv 文件的行数

    nrows <- sapply( csvfile, function(f) nrow(read.csv(f)) )
    

    然后在 nrows>10 时执行你所做的操作。
    要删除这些文件,请使用unlink

    unlink(x, recursive = FALSE, force = FALSE)
    

    【讨论】:

    • 注意:如果您不想删除原始文件,但又不想处理,只需在循环中使用 if(nrows&lt;10) break 之类的东西。
    • nrows 给了我没有。每个 csv 文件的行数,但是当我使用 if(nrows&lt;10) breakif (nrows&gt;10){#my desired operations} R 时,R 会给出以下警告消息:the condition has length &gt; 1 and only the first element will be used 并且程序没有给出所需的输出。
    • 如果我不使用任何关于 no 的限制。行并在该目录中的所有 csv 文件上运行代码,R 向我显示以下错误Error in decompose(abc2) : time series has no or less than 2 periods
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    相关资源
    最近更新 更多