【发布时间】:2021-07-29 05:09:26
【问题描述】:
我有一个tsibble 矩阵,它每天从传入的数据中增长 32 行,我只想在我的绘图函数中绘制过去 5 天,这需要我对底部行的 (32*5) 160 行进行子集化.随着新的每日数据的出现,每行的日期每 32 行更改一次。
例如
library(tsibble)
library(lubridate)
df <- data.frame(ticker = c("UST10Y", "UST2Y", "AAPL", "SPX", "BNO"),
buy_price = c(62.00, 68.00, 37.00, 55.00, 41.00),
sale_price = c(64.00, 71.00, 42.00, 60.00, 45.00),
close_price = c(63.00, 70.00, 38.00, 56.00, 43.00),
date = mdy(c("April 29th, 2021", "April 29th, 2021", "April 29th, 2021", "April 29th, 2021", "April 29th, 2021")))
df2 <- data.frame(ticker = c("UST10Y", "UST2Y", "AAPL", "SPX", "BNO"),
buy_price = c(63.00, 69.00, 38.00, 53.00, 44.00),
sale_price = c(66.00, 77.00, 47.00, 63.00, 48.00),
close_price = c(65.00, 74.00, 39.00, 55.00, 45.00),
date = mdy(c("April 30th, 2021", "April 30th, 2021", "April 30th, 2021", "April 30th, 2021", "April 30th, 2021")))
df3 <- data.frame(ticker = c("UST10Y", "UST2Y", "AAPL", "SPX", "BNO"),
buy_price = c(63.00, 69.00, 38.00, 53.00, 44.00),
sale_price = c(66.00, 77.00, 47.00, 63.00, 48.00),
close_price = c(65.00, 74.00, 39.00, 55.00, 45.00),
date = mdy(c("May 1st, 2021", "May 1st, 2021", "May 1st, 2021", "May 1st, 2021", "May 1st, 2021")))
final_df <- rbind(df,df2, df3)
as_tsibble(final_df, index = date, key = ticker, regular = T)
我只能用函数检索最后 5 行
final_df %>%
slice_tail(n = 5)
tail(final_df, 5)
虽然我应该让n = 6 我得到这个错误。
Error: Can't obtain the interval due to the mismatched index class.
i Please see `vignette("FAQ")` for details.
关于如何解决此问题的任何见解或想法?
OG 数据
rr_master_tsibble_rep <-
structure(
list(
DATE = structure(
c(
18751,
18752,
18751,
18751,
18751,
18751,
18751,
18751,
18751,
18751,
18751,
18751,
18751,
18751,
18751,
18751,
18751,
18751,
18751,
18751,
18751,
18751,
18751,
18751,
18751,
18750,
18751,
18750,
18751,
18750,
18751,
18750,
18751,
18750,
18751,
18750,
18751,
18750,
18751,
18750,
18751
),
class = "Date"
),
TICKER = c(
"AAPL ",
"AAPL ",
"AMZN ",
"CAD/USD ",
"COMPQ ",
"COPPER ",
"DAX ",
"EUR/USD ",
"FB ",
"GBP/USD ",
"GOLD ",
"GOOGL ",
"MSFT ",
"NATGAS ",
"NFLX ",
"NIKK ",
"NYXBT ",
"RUT ",
"SILVER ",
"SPX ",
"SSEC ",
"TSLA ",
"USD ",
"USD/CHF ",
"USD/JPY ",
"UST10Y ",
"UST10Y ",
"UST2Y ",
"UST2Y ",
"VIX ",
"VIX ",
"WTIC ",
"WTIC ",
"XLE ",
"XLE ",
"XLF ",
"XLF ",
"XLK ",
"XLK ",
"XLU ",
"XLU "
),
BUY.TRADE = c(
131,
127,
3335,
0.79,
13801,
4.26,
15106,
1.198,
310,
1.38,
1753,
2310,
248,
2.72,
483,
28431,
50209,
2227,
25.75,
4140,
3407,
657,
90.3,
0.9,
107.45,
1.71,
1.72,
0.19,
0.18,
15.74,
15.8,
62.04,
62.2,
46.73,
46.75,
35.03,
35.22,
139.22,
138.45,
65.24,
65.29
),
SELL.TRADE = c(
136,
137,
3521,
0.82,
14204,
4.62,
15463,
1.216,
334,
1.401,
1797,
2407,
264,
3.06,
520,
29840,
60982,
2339,
27.09,
4229,
3498,
745,
91.43,
0.92,
109.74,
1.57,
1.56,
0.15,
0.15,
19.12,
18.98,
65.16,
65.7,
50.99,
51.91,
36.9,
37.01,
144.08,
144.46,
67.88,
67.45
),
PREV.CLOSE = c(
132,
127,
3386,
0.81,
13895,
4.53,
15236,
1.206,
322,
1.391,
1791,
2343,
251,
2.97,
509,
28812,
58035,
2277,
26.96,
4192,
3446,
684,
90.93,
0.91,
109.07,
1.65,
1.63,
0.16,
0.16,
18.61,
18.31,
63.58,
64.49,
49.39,
50.75,
36.26,
36.44,
139.7,
139.31,
66.72,
66.71
),
TREND = structure(
c(
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
1L,
2L,
2L,
2L,
1L,
2L,
2L,
2L,
2L,
2L,
1L,
1L,
1L,
1L,
2L,
2L,
2L,
2L,
2L,
1L,
1L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
3L,
3L
),
.Label = c("BEARISH", "BULLISH",
"NEUTRAL"),
class = "factor"
)
),
row.names = c(NA,-41L),
key = structure(
list(
TICKER = c(
"AAPL ",
"AMZN ",
"CAD/USD ",
"COMPQ ",
"COPPER ",
"DAX ",
"EUR/USD ",
"FB ",
"GBP/USD ",
"GOLD ",
"GOOGL ",
"MSFT ",
"NATGAS ",
"NFLX ",
"NIKK ",
"NYXBT ",
"RUT ",
"SILVER ",
"SPX ",
"SSEC ",
"TSLA ",
"USD ",
"USD/CHF ",
"USD/JPY ",
"UST10Y ",
"UST2Y ",
"VIX ",
"WTIC ",
"XLE ",
"XLF ",
"XLK ",
"XLU "
),
.rows = structure(
list(
1:2,
3L,
4L,
5L,
6L,
7L,
8L,
9L,
10L,
11L,
12L,
13L,
14L,
15L,
16L,
17L,
18L,
19L,
20L,
21L,
22L,
23L,
24L,
25L,
26:27,
28:29,
30:31,
32:33,
34:35,
36:37,
38:39,
40:41
),
ptype = integer(0),
class = c("vctrs_list_of",
"vctrs_vctr", "list")
)
),
row.names = c(NA, 32L),
class = c("tbl_df",
"tbl", "data.frame"),
.drop = TRUE
),
index = structure("DATE", ordered = TRUE),
index2 = "DATE",
interval = structure(
list(
year = 0,
quarter = 0,
month = 0,
week = 0,
day = 1,
hour = 0,
minute = 0,
second = 0,
millisecond = 0,
microsecond = 0,
nanosecond = 0,
unit = 0
),
.regular = TRUE,
class = c("interval",
"vctrs_rcrd", "vctrs_vctr")
),
class = c("tbl_ts", "tbl_df", "tbl",
"data.frame"))
所以日期是这样分组的,而不是交替按股票代码分组。
【问题讨论】:
-
什么是
rr_master_tsibble -
我在
n = 6final_df %>% + slice_tail(n = 6) %>% nrow# [1] 6没有问题 -
那是我的原始数据,我正在尝试创建一个代表,因为这是我在使用原始数据时遇到的问题,但是我无法重新创建日期分组在一起的
df,就像我的原始数据一样。 -
你可以试试
final_df %>% ungroup %>% slice_tail(n = 6) -
rr_master_tsibble %>% ungroup() %>% + slice_tail(n = 33) Error: Can't obtain the interval due to the mismatched index class. i Please see vignette("FAQ") for details.
标签: r dplyr slice base tsibble