2012-01-23 29 views
1

我希望對導入的csv文件進行日期處理,第一列是格式爲dd/mm/yyyy的日期列,我希望將R或Octave用作此日期操作之後的日期操作,我需要執行此操作對其餘數據的各種矩陣/矢量運算取決於這些日期。我應該在csv文件中使用R還是Octave進行日期處理?

導入的csv文件中的日期不會包含週末,並且總會有一些其他缺失的日期,我想要做的是檢查文件並插入所有這些缺失的日期和週末,以便日期列完全從開始到結束連續,沒有缺失日期,並且與這些插入日期相關聯的「虛擬」空值在合成矩陣中被適當地寫入。我應該使用哪種R還是八度音,以便於做到這一點?我知道使用Octave來做到這一點非常棘手,但我不知道R.最終所有的日期和數據將被寫入另一個命名的文本文件,以便隨後在Gnuplot中進行繪圖。

此外,如果有人可以提示我需要使用哪些日期函數,如何解決這個問題等,這將是偉大的。

+0

順便說一句,這樣的問題是兩可的「主觀的,應關閉」。你可能想重新說一些事情來使問題更客觀。 –

回答

2

聽起來好像你正在處理財務數據。 R軟件包zoo,xts和quantmod可能應該進行審查,因爲它們爲這一領域的常見數據處理任務提供了有效的解決方案。還有其他包定義財務日曆。還有一個R-SIG郵件列表專門討論了這個話題。即使您正在處理一些其他數據僅限於非假日工作日的真實場景,您仍然可以在這些包中找到有用的功能,以用於您(非常模糊地)列出的任務。

在SO上搜索「[r]財務日曆」可以帶來this potentially relevant hit以及其他一些搜索。

+0

還有一個關於金融的任務觀點:http://cran.r-project.org/web/views/Finance.html –

1

你可以在任何一種情況下操作日期,所以它主要歸結爲個人對語言的偏好。

自從我使用Octave以來已經有一段時間了,但我經常使用R和MATLAB,而且我個人更喜歡使用R來進行數據操作(通常是數據管理任務)。如果你選擇R,lubridate包是一個很好的開始。

1

我從來沒有使用過八度,但我使用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") 

更多...這取決於你的問題。我只是試圖給你一個出發點。祝你好運!

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)) 
    } 
    } 
} 
相關問題