R如何从时间序列中提取月底行
我有一个这样的数据框R如何从时间序列中提取月底行,r,dataframe,time-series,R,Dataframe,Time Series,我有一个这样的数据框 X.1 X date adjClose lagx pct_change rollmeanx rollsdx roll_sharpe 1 1 1 2019-01-02 119.1437 NA NA NA NA NA 2 2 2 2019-01-03 120.4995 119.1437 0.01125
X.1 X date adjClose lagx pct_change rollmeanx rollsdx roll_sharpe
1 1 1 2019-01-02 119.1437 NA NA NA NA NA
2 2 2 2019-01-03 120.4995 119.1437 0.0112514165 NA NA NA
3 3 3 2019-01-04 119.1047 120.4995 -0.0117107526 NA NA NA
4 4 4 2019-01-07 118.7535 119.1047 -0.0029568789 NA NA NA
5 5 5 2019-01-08 118.4414 118.7535 -0.0026352631 NA NA NA
6 6 6 2019-01-09 118.2561 118.4414 -0.0015671396 NA NA NA
7 7 7 2019-01-10 117.4953 118.2561 -0.0064751785 NA NA NA
8 8 8 2019-01-11 117.9537 117.4953 0.0038865459 NA NA NA
9 9 9 2019-01-14 117.5148 117.9537 -0.0037350598 NA NA NA
10 10 10 2019-01-15 117.0856 117.5148 -0.0036654449 NA NA NA
11 11 11 2019-01-16 117.2026 117.0856 0.0009986684 NA NA NA
12 12 12 2019-01-17 117.2319 117.2026 0.0002496048 NA NA NA
13 13 13 2019-01-18 116.6174 117.2319 -0.0052693208 NA NA NA
14 14 14 2019-01-22 117.4075 116.6174 0.0067292515 NA NA NA
15 15 15 2019-01-23 117.3587 117.4075 -0.0004155585 NA NA NA
16 16 16 2019-01-24 118.1293 117.3587 0.0065229956 NA NA NA
17 17 17 2019-01-25 117.5635 118.1293 -0.0048120800 NA NA NA
18 18 18 2019-01-28 117.4465 117.5635 -0.0009965950 NA NA NA
19 19 19 2019-01-29 118.0415 117.4465 0.0050404892 NA NA NA
20 20 20 2019-01-30 117.9537 118.0415 -0.0007442322 NA NA NA
21 21 21 2019-01-31 118.9681 117.9537 0.0085266869 NA NA NA
22 22 22 2019-02-01 118.2510 118.9681 -0.0060639085 NA NA NA
23 23 23 2019-02-04 117.7231 118.2510 -0.0044843049 NA NA NA
24 24 24 2019-02-05 118.2608 117.7231 0.0045465818 NA NA NA
25 25 25 2019-02-06 118.3195 118.2608 0.0004957449 NA NA NA
26 26 26 2019-02-07 119.1016 118.3195 0.0065665271 NA NA NA
27 27 27 2019-02-08 119.6099 119.1016 0.0042501022 1.358807e-04 0.005456898 1.358807e-04
28 28 28 2019-02-11 119.1407 119.6099 -0.0039386231 -4.483516e-04 0.005014440 -4.483516e-04
29 29 29 2019-02-12 118.8376 119.1407 -0.0025501810 -9.602194e-05 0.004485371 -9.602194e-05
30 30 30 2019-02-13 118.3879 118.8376 -0.0037985136 -1.283925e-04 0.004509813 -1.283925e-04
31 31 31 2019-02-14 119.0624 118.3879 0.0056654898 1.908672e-04 0.004617770 1.908672e-04
32 32 32 2019-02-15 119.2482 119.0624 0.0015576324 3.110508e-04 0.004610843 3.110508e-04
33 33 33 2019-02-19 119.5512 119.2482 0.0025349579 6.575945e-04 0.004414827 6.575945e-04
34 34 34 2019-02-20 119.2091 119.5512 -0.0028702641 3.977172e-04 0.004416021 3.977172e-04
35 35 35 2019-02-21 118.1435 119.2091 -0.0090194456 1.944715e-04 0.004724659 1.944715e-04
36 36 36 2019-02-22 118.8474 118.1435 0.0059225138 5.632392e-04 0.004785127 5.632392e-04
37 37 37 2019-02-25 118.4954 118.8474 -0.0029700520 4.105961e-04 0.004833734 4.105961e-04
38 38 38 2019-02-26 119.0820 118.4954 0.0049257040 5.904461e-04 0.004913833 5.904461e-04
39 39 39 2019-02-27 117.7329 119.0820 -0.0114589388 3.523838e-04 0.005340492 3.523838e-04
40 40 40 2019-02-28 117.3321 117.7329 -0.0034160973 -3.782189e-05 0.005225321 -3.782189e-05
我需要的是一个只有月末行的数据框
到目前为止,我所做的是:
"
"
Tnx为您提供提示。可能有更好、更优雅的方法,但这里有一个可能的解决方案 从列日期的日期格式开始,您可以使用lubridate包中的month和year函数将其分为月份和年份 然后,将01添加到每个月和年份,以创建每个月的第一个日期。然后,您可以按此日期分组,并选择每个组的最大日期,该日期对应于每个月的最后一个日期 联吡啶酯 df%>%mutateMonth=monthdate,Year=yeardate%>% 变更日期=ymdpasteYear,Month,01,sep=-%>% 分组日期%>% filterdate==maxdate A tibble:61 x 6 分组:Ini_日期[61] 日期t值月份年份初始日期 1 2015-03-31 16 -0.0729 3 2015 2015-03-01 2 2015-04-30 46 2.09 4 2015 2015-04-01 3 2015-05-31 77 -0.611 5 2015 2015-05-01 4 2015-06-30 107 -1.36 6 2015 2015-06-01 5 2015-07-31 138 1.44 7 2015 2015-07-01 6 2015-08-31 169 -1.09 8 2015 2015-08-01 7 2015-09-30 199 -0.152 9 2015 2015-09-01 8 2015-10-31 230 1.04 10 2015 2015-10-01 9 2015-11-30 260 -0.494 11 2015 2015-11-01 10 2015-12-31 291 -0.703 12 2015 2015-12-01 …还有51行 它回答了你的问题吗 可复制示例
为您的答案指定日期Hi和tnx确实,您的代码与您的repro示例配合得很好。根据我的数据,我得到了这个错误消息:“总结中的错误。factor1:21,na.rm=FALSE:“max”对factors没有意义“我不知道为什么会这样”。我的数据的特点是,在某些列中,我的数据不是日期列,在某些月份,最后一天不是31日,而是29日,我们谈论的是股票市场数据。请查看strNameOfYourData,您的日期列可能是因子格式,而不是日期格式。如果是,请使用lubridate中的ymd函数将其转换为日期格式。NA最后一天不是31岁在这里不是问题。只需将日期列转换为日期格式。让我知道它是否有效。它有效,tnx;-你能给我一本关于timeseries的食谱的建议吗?不客气。我想说你可以看看lubridate的官方文件。
library(tidyverse)
library(roll)
library (xts)
library(PerformanceAnalytics)
library(zoo)
library(tseries)
tlt_data <- read.csv('tlt_r.csv')
d <- data.frame(date = as.Date(tlt_data$date, origin = '1970-01-01'))
d$day <- format(d$date, format = '%d')
d$my <- format(d$date, format = '%Y-%m')
fds <- with(d, tapply(day, my, max))
fds <- as.Date(paste(row.names(fds), fds, sep = '-'))
xdf_endofmonth <- tlt_data[tlt_data$date %in% fds, 'date', 'roll_sharpe']