2016-07-06 32 views
0

我輸入以下數據文件:三對日期 - 價格數據(加上列索引麻木)。問題是每個價格都有不同的國定假日,因此英國和美國的價格最終不一致。有沒有一種很好的方式將日期轉換爲xts/zoo格式,並填入價格不存在的NA(mkt已關閉)?混合日期數據文件

ColNumb Date1  UK2Y  Date2   US2Y  Date3  GBPUSD 
1  09/07/2012 0.9330 09/07/2012 0.5210 09/07/2012 1.552554 
2 10/07/2012 0.9401 10/07/2012 0.5235 10/07/2012 1.551831 
3 11/07/2012 0.9122 11/07/2012 0.5003 11/07/2012 1.550388 
4 12/07/2012 0.8732 12/07/2012 0.4805 12/07/2012 1.542972 

UK2y <- as.xts(data[1:1033,1:2]) 
US2y <- as.xts(data[,3:4]) 
GBPUSD <- data[,5:6] 

我一直在使用{A <- strptime(UK2y$Date1, format = "%d/%m/%Y")}嘗試過,但是這會導致無效動物園對象。我結束了在「A」正確格式的日期作爲未cbind與動物園POSIX類(「錯誤結構」):

UK2y <- cbind(UK2y, A) 

你在各成對列是看到上面有一個額外的問題不同的長度。某種「日期匹配」功能會緩解,或者在動物園/ xts中存在soln?

回答

2

下面是解決方案使用merge

# subset your data 
UK2Y = data[,c("Date1", "UK2Y")] 
US2Y = data[,c("Date2", "US2Y")] 
GBPUSD = data[,c("Date3", "GBPUSD")] 

# rename them to have the same Date column 
names(UK2Y)[names(UK2Y) == "Date1"] <- "Date" 
names(US2Y)[names(US2Y) == "Date2"] <- "Date" 
names(GBPUSD)[names(GBPUSD) == "Date3"] <- "Date" 

# Test: remove one data 
US2Y = US2Y[-4,] # market closed in US this day 

# Merge the data frames 
group = merge(UK2Y, US2Y, by = "Date", all = T) # "all = T" will show missing data as NA 
group = merge(group, GBPUSD, by = "Date", all = T) 

print(group) 

    Date UK2Y US2Y GBPUSD 
1 2012-07-09 0.9330 0.5210 1.552554 
2 2012-07-10 0.9401 0.5235 1.551831 
3 2012-07-11 0.9122 0.5003 1.550388 
4 2012-07-12 0.8732  NA 1.542972 

編輯

您可以創建你想要的順序產生正確的日期一個空的數據幀,然後合併:

UK2Y$Date = as.Date(UK2Y$Date) 
US2Y$Date = as.Date(US2Y$Date) 
GBPUSD$Date = as.Date(GBPUSD$Date) 

# create empty dataframe with correct dates 
dates = data.frame(Date = seq(as.Date("2012-07-01"), as.Date("2012-07-20"), by = '1 day')) 

US2Y = US2Y[-4,] 

group = merge(dates, UK2Y, by = "Date", all = T) 
group = merge(group, US2Y, by = "Date", all = T) 
group = merge(group, GBPUSD, by = "Date", all = T) 

print(group) 
    Date UK2Y US2Y GBPUSD 
1 2012-07-01  NA  NA  NA 
2 2012-07-02  NA  NA  NA 
3 2012-07-03  NA  NA  NA 
4 2012-07-04  NA  NA  NA 
5 2012-07-05  NA  NA  NA 
6 2012-07-06  NA  NA  NA 
7 2012-07-07  NA  NA  NA 
8 2012-07-08  NA  NA  NA 
9 2012-07-09 0.9330 0.5210 1.552554 
10 2012-07-10 0.9401 0.5235 1.551831 
11 2012-07-11 0.9122 0.5003 1.550388 
12 2012-07-12 0.8732  NA 1.542972 
13 2012-07-13  NA  NA  NA 
14 2012-07-14  NA  NA  NA 
15 2012-07-15  NA  NA  NA 
16 2012-07-16  NA  NA  NA 
17 2012-07-17  NA  NA  NA 
18 2012-07-18  NA  NA  NA 
19 2012-07-19  NA  NA  NA 
20 2012-07-20  NA  NA  NA 
+0

從彭博出口的數據是這種日期格式。如果日期在R中正確指定,但是當前是以數字「1/1/xx」而不是按時間順序排序的日期,則該Soln非常適用。 – rrg

+0

編輯回答您的問題。 – bVa