我的数据框ask.subset
包含除一些其他东西(汇率数据[Open,Close,Volume等])之外的日期。一个典型的交易日是从第1天的UTC时间21:00:00到第2天UTC的21:00:00。我的日期列在CET中,所以我必须将它们移动2小时以满足我的需求,我使用ask.subset$Time$hour<-ask.subset$Time$hour+2
因为日期格式为POSIXlt
。 因此2004-01-02 22:00:00
变成2004-01-03 00:00:00
。但是如果我想抓住这个特定日期的工作日,它仍然会返回2004-01-02 22:00:00
的工作日。所以平日里没有变化。我怎样才能做到这一点?在POSIXlt加入小时时没有星期几的转换
重复的例子:
structure(list(Time = structure(list(sec = c(0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), min = c(0L,
5L, 10L, 15L, 20L, 25L, 30L, 35L, 40L, 45L, 50L, 55L, 0L, 5L,
10L, 15L, 20L, 25L, 30L, 35L, 40L, 45L, 50L, 55L, 0L), hour = c(22L,
22L, 22L, 22L, 22L, 22L, 22L, 22L, 22L, 22L, 22L, 22L, 23L, 23L,
23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 0L), mday = c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L), mon = c(0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L), year = c(104L, 104L, 104L, 104L, 104L, 104L,
104L, 104L, 104L, 104L, 104L, 104L, 104L, 104L, 104L, 104L, 104L,
104L, 104L, 104L, 104L, 104L, 104L, 104L, 104L), wday = c(4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L), yday = c(0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 1L), isdst = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L
), zone = c("CET", "CET", "CET", "CET", "CET", "CET", "CET",
"CET", "CET", "CET", "CET", "CET", "CET", "CET", "CET", "CET",
"CET", "CET", "CET", "CET", "CET", "CET", "CET", "CET", "CET"
), gmtoff = c(NA_integer_, NA_integer_, NA_integer_, NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_,
NA_integer_)), .Names = c("sec", "min", "hour", "mday", "mon",
"year", "wday", "yday", "isdst", "zone", "gmtoff"), class = c("POSIXlt",
"POSIXt"), tzone = "CET"), Open = c(1.25436, 1.2545, 1.25488,
1.25533, 1.25542, 1.25562, 1.25548, 1.25579, 1.2556, 1.25605,
1.25555, 1.25608, 1.25668, 1.25647, 1.25647, 1.25647, 1.25646,
1.25721, 1.25697, 1.25728, 1.25753, 1.25777, 1.25758, 1.25775,
1.25717), High = c(1.25464, 1.25498, 1.25547, 1.25561, 1.25567,
1.25569, 1.25581, 1.25595, 1.25597, 1.25616, 1.25632, 1.2565,
1.25681, 1.2567, 1.2569, 1.25716, 1.25711, 1.25728, 1.25751,
1.25775, 1.25811, 1.25923, 1.25788, 1.258, 1.25818), Low = c(1.25403,
1.25445, 1.25468, 1.25519, 1.25534, 1.25536, 1.25528, 1.2553,
1.25541, 1.25545, 1.25555, 1.25599, 1.25621, 1.25582, 1.2562,
1.25637, 1.25646, 1.25671, 1.25688, 1.25722, 1.25741, 1.25746,
1.25738, 1.25729, 1.25717), Close = c(1.25446, 1.25477, 1.25533,
1.25529, 1.25554, 1.25547, 1.25577, 1.25537, 1.25576, 1.25555,
1.2561, 1.2565, 1.25645, 1.25635, 1.25634, 1.25642, 1.25696,
1.25677, 1.25716, 1.25766, 1.25791, 1.25907, 1.25775, 1.25733,
1.25818), Volume = c(2096.8, 2106.2, 2454.7, 2570.3, 2251.6,
1874.8, 2394, 857.2, 1582.7, 1947.9, 1258.3, 1549.1, 1870.8,
2165.4, 2287.4, 2469.3, 2244.1, 1915.1, 2440.6, 2274.6, 2167.1,
2031.3, 2365.1, 979.2, 2642.1)), .Names = c("Time", "Open", "High",
"Low", "Close", "Volume"), row.names = 529:553, class = "data.frame")
导入前者为ask.subset
和执行
ask.subset$Time$wday
返回
[1] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5
然后执行以下操作:
ask.subset$Time$hour<-ask.subset$Time$hour+2
,并再次检查,如果平日已经转移
ask.subset$Time$wday
这对我来说也没有
[1] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5
这没有任何意义,你能提供一个可重复的例子吗? – 2014-09-01 10:48:28
这对我的欲望来说是完全有意义的。 – Joschka 2014-09-01 11:07:31
我的意思是说,工作日给你错误的结果是毫无意义的... – 2014-09-01 11:10:29