2012-11-20 27 views
1

我組合了一些數據以使用match()函數從一個非常大的數據框中提取特定的交易日期/時間,並完全陷入爲什麼我的代碼不管用。請注意,日期和時間列是分開的,這也對使用as.POSIXct函數提出了挑戰。請看看:在R中使用chron包合併列的日期列

這是數據是怎麼來對我說:

Symbol  Date Time  Open  High  Low Close Volume Tick.Count 
1 USH94 01/3/1994 7:21 114.4062 114.4375 114.3750 114.4062  0   5 
2 USH94 01/3/1994 7:22 114.3750 114.4062 114.3125 114.3750  0   11 
3 USH94 01/3/1994 7:23 114.3438 114.3750 114.3125 114.3438  0   7 
4 USH94 01/3/1994 7:24 114.3125 114.3125 114.2500 114.2812  0   14 
5 USH94 01/3/1994 7:25 114.2500 114.2812 114.2188 114.2188  0   6 
6 USH94 01/3/1994 7:26 114.1875 114.2500 114.1875 114.2500  0   13 

我然後使用日期()和時間()函數將列從因素的日期和時間值轉換。在這種情況下,我還將秒保存爲一個字符串作爲變量a,並且由於時間變化我添加了一個小時。

US$Time <- times(paste(US$Time,a,sep = ':'))+1/24 
US$Date <- dates(as.character(US$Date)) 

下面是美國貌似現在:

head(US) 

    Symbol  Date  Time  Open  High  Low Close Volume Tick.Count 
1 USH94 01/03/94 08:21:00 114.4062 114.4375 114.3750 114.4062  0   5 
2 USH94 01/03/94 08:22:00 114.3750 114.4062 114.3125 114.3750  0   11 
3 USH94 01/03/94 08:23:00 114.3438 114.3750 114.3125 114.3438  0   7 
4 USH94 01/03/94 08:24:00 114.3125 114.3125 114.2500 114.2812  0   14 
5 USH94 01/03/94 08:25:00 114.2500 114.2812 114.2188 114.2188  0   6 
6 USH94 01/03/94 08:26:00 114.1875 114.2500 114.1875 114.2500  0   13 

相同。

然後我嘗試的日期和時間與粘貼()函數

US$TradeDates <- paste(US$Date,US$Time) 

head(US) 

    Symbol  Date  Time  Open  High  Low Close Volume Tick.Count  TradeDates 
1 USH94 01/03/94 08:21:00 114.4062 114.4375 114.3750 114.4062  0   5 01/03/94 0.34791667 
2 USH94 01/03/94 08:22:00 114.3750 114.4062 114.3125 114.3750  0   11 01/03/94 0.34861111 
3 USH94 01/03/94 08:23:00 114.3438 114.3750 114.3125 114.3438  0   7 01/03/94 0.34930556 
4 USH94 01/03/94 08:24:00 114.3125 114.3125 114.2500 114.2812  0   14 01/03/94 0.35000000 
5 USH94 01/03/94 08:25:00 114.2500 114.2812 114.2188 114.2188  0   6 01/03/94 0.35069444 
6 USH94 01/03/94 08:26:00 114.1875 114.2500 114.1875 114.2500  0   13 01/03/94 0.35138889 

見該TradeDates列有時間小數形式一下子結合....但什麼是真正stumpling我是如果我通過元素做同樣的功能元素,我得到了想要的結果:

US$TradeDates[1] <- paste(US$Date[1],US$Time[1]) 

head(US) 

    Symbol  Date  Time  Open  High  Low Close Volume Tick.Count   TradeDates 
1 USH94 01/03/94 08:21:00 114.4062 114.4375 114.3750 114.4062  0   5 01/03/94 08:21:00 
2 USH94 01/03/94 08:22:00 114.3750 114.4062 114.3125 114.3750  0   11 01/03/94 0.34861111 
3 USH94 01/03/94 08:23:00 114.3438 114.3750 114.3125 114.3438  0   7 01/03/94 0.34930556 
4 USH94 01/03/94 08:24:00 114.3125 114.3125 114.2500 114.2812  0   14 01/03/94 0.35000000 
5 USH94 01/03/94 08:25:00 114.2500 114.2812 114.2188 114.2188  0   6 01/03/94 0.35069444 
6 USH94 01/03/94 08:26:00 114.1875 114.2500 114.1875 114.2500  0   13 01/03/94 0.35138889 

通知的第一行中的最後一列是正是我想要的,但所有其他行仍在小數形式。如果這是一個可管理的數據集,我只會使用一個循環,但這實際上是數十億行,而R無法處理該循環。

有什麼想法?

+0

「US $ TradeDates < - chron(日期= US $日期,時間= US $時間) – MattBagg

回答

1

你應該使用POSIX格式,它會讓你的生活更輕鬆。

可以使用

as.POSIXlt(as.character(US$Date), format="%d/%m/%Y") 

然後Date列轉換爲POSIXlt,只是在幾秒鐘添加Time列,POSIXlt格式將處理其餘部分。