1

我希望对导入的 csv 文件执行日期操作,第一列是格式为 dd/mm/yyyy 的日期列,我希望为此使用 R 或 Octave,因为在此日期操作之后我将需要做各种矩阵/vector 对其余数据的操作,取决于这些日期。

导入的 csv 文件中的日期将不包括周末,并且总是会有一些其他缺失的日期,我想要做的是检查文件并插入所有这些缺失的日期加上周末,以便日期列从开始到完全连续结束,没有丢失的日期,并且与这些插入的日期相关的“虚拟”空值被适当地写入结果矩阵。为了便于执行此操作,我应该使用 R 或 Octave 中的哪一个?我知道使用 Octave 执行此操作会非常棘手,但我不了解 R。最终,所有日期和数据都将写入另一个命名的文本文件,以便随后在 Gnuplot 中绘图。

此外,如果有人可以提示我需要使用哪些日期函数、如何解决这个问题等,那就太好了。

4

4 回答 4

2

听起来好像您正在处理财务数据。R 包 zoo、xts 和 quantmod 可能应该进行审查,因为它们为该领域的常见数据处理任务提供了有效的解决方案。还有其他定义财务日历的包。还有一个专门讨论这个主题的 R-SIG 邮件列表。即使您正在处理其他一些将数据限制在非假日工作日的真实场景,您仍然会在这些包中找到有用的功能,以完成您(相当模糊地)概述的任务。

在 SO 上搜索“[r] Finance calendar”会发现这个潜在的相关热门以及其他几个热门。

于 2012-01-23T15:13:41.027 回答
1

我从未使用过 Octave,但我使用 R 进行数据处理,特别是 csv 文件,其中 Date 作为第一列,到目前为止我对它很满意。我在使用日期时建议的函数是 strptime 函数。加载 csv 数据框后,将日期字符转换为日期。这是一个例子:

 % if Date is in the first column
df$Date<-strptime(as.character(df[,"Date"]),tz="CET",format="%d-%m-%Y %H:%M")

然后,您可以使用提取日期、月份和年份

year<-format(df$Date,"%Y")
month<-format(df$Date,"%m")
day<-format(df$Date,"%d")

更多...取决于您的问题。我只是想给你一个起点。祝你好运!

于 2012-01-23T15:08:46.533 回答
1

您可以在其中任何一个中操作日期,因此它主要归结为个人对语言的偏好。

自从我使用 Octave 已经有一段时间了,但我经常使用 R 和 MATLAB,在这两者中,我个人更喜欢 R 来进行数据操作(以及一般的数据处理任务)。如果您选择 R,则该lubridate软件包是一个不错的起点。

于 2012-01-23T14:58:22.613 回答
0

假设数据看起来像:

date,attr1,attr2,attr3
"23/01/2011",1,2,3
"24/01/2011",4,5,6
"25/01/2011",7,8,9
"26/01/2011",10,11,12
"28/01/2011",13,45,55
"31/01/2011",2,2,2

然后您可以尝试以下操作:

data<-read.csv("yourfile.csv")
#not easy to insert new rows in data frame. So split data and dates
dates<-as.vector(data[[1]])
data<-as.matrix(data[,2:ncol(data)])
rows<-nrow(data)
for(i in 1:(rows-1)){
  dd<-as.Date(dates[i],"%d/%m/%y%y")
  dd1<-as.Date(dates[(i+1)],"%d/%m/%y%y")
  diff<-dd1-dd
  if (diff>1){
    for (j in 1:(diff-1)){
      new.date<-format(dd+j,format="%d/%m/%y%y")
      dates[length(dates)+1]<-strtrim(paste(new.date,""),10)
      data<-rbind(data,c(-1,-1,-1))
    }
  }
}
于 2012-01-24T10:50:46.863 回答