【问题标题】:Using R to create and merge zoo object time series from csv files使用 R 从 csv 文件创建和合并动物园对象时间序列
【发布时间】:2012-12-30 03:36:36
【问题描述】:

我在一个目录中有大量 csv 文件。这些文件包含两列,Date 和 Price。 filename.csv 的 filename 包含数据系列的唯一标识符。我知道当这些时间序列数据是动物园对象时,可以处理合并数据序列的缺失值。我也明白,在使用na.locf(merge() function 时,我可以用最近的观察来填补缺失的值。

我想自动化这个过程。

  1. 将*.csv 文件列式日期和价格数据加载到R 数据框中。
  2. 在合并后的动物园“时间序列组合”对象中建立每个不同的时间序列,其标识等于它们的每个 s。
  3. 使用MergedData <- na.locf(merge( )) 合并这些动物园对象的时间序列。

当然,最终目标是使用fPortfolio 包。

我使用以下语句创建了一个 Date,Price 对的数据框。这种方法的问题是我丢失了文件中时间序列数据的<filename> 标识符。

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

我知道我可以编写代码来逐个实例地生成执行所有这些步骤所需的 R 语句。我想知道是否有某种方法不需要我这样做。我很难相信其他人不想执行同样的任务。

【问题讨论】:

  • “这种方法的问题是我丢失了文件中数据的标识符”你能解释一下吗?否则在源 e 中编写您的脚本。 myprocess.R,您可以使用 Rscript myprocess.R 调用它
  • 我的意思是... csv 文件名不是随机的,而是提供数据的标识(例如,IBM.csv 表示 IBM 每日收益等)。在使用上面的 lapply() 函数时,我丢失了数据的名称。

标签: r csv merge zoo


【解决方案1】:

试试这个:

z <- read.zoo(files, header = TRUE, sep = ",")
z <- na.locf(z)

我假设有一个标题行和类似 2000-01-31,23.40 的行。使用任何必要的 read.zoo 参数来适应您拥有的任何格式。

【讨论】:

    【解决方案2】:

    您可以使用sapply(保留文件名)进行更好的格式化。在这里我会保留lapply。

    1. 假设所有文件都在同一个目录中,您可以使用list.files。 对于这样的工作流程非常方便。
    2. 我会使用read.zoo 直接获取动物园对象(避免以后强制)

    例如:

    zoo.objs <- lapply(list.files(path=MY_FILES_DIRECTORY,
                                  pattern='^zoo_*.csv',    ## I look for csv files, 
                                                           ##   which names start with zoo_
                                  full.names=T),           ## to get full names path+filename
                       read.zoo)
    

    我现在再次使用list.files 重命名我的结果

     names(zoo.objs) <- list.files(path=MY_FILES_DIRECTORY,
                              pattern='^zoo_*.csv')
    

    【讨论】:

    • 谢谢。我确实最终使用了 list.files,然后将 lapply 与我自己的 R 脚本一起使用。
    猜你喜欢
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 2017-10-14
    • 1970-01-01
    • 2011-12-14
    相关资源
    最近更新 更多