2017-05-20 5 views
1

저는 quantmod을 처음 사용하기 때문에 날짜를 부분 집합화할 수있는 여러 가지 방법이 있지만 매년 특정 날짜 (예 : 12/24)로 서브 세트해야합니다. 수년 간의 데이터 세트에서 quantmod은이 기능을 갖고 있지 않습니다. 그렇게 할 수있는 방법이 있습니까?서브 세트 xts 또는 data.frame을 매년 특정 날짜로 변경합니다.

예 :

getSymbols('AMD',src='google') 

하고 2007 년부터 데이터를 얻고 난 그냥

2007-12-24 ... 
2008-12-24 ... 
2016-12-26 ... 
#and so on. 

답변

1

당신은이 같은 시도 할 수 있습니다와 dataframe에 부분 집합하려면 :

getSymbols('AMD',src='google') 
#indexmon==11 for every December and indexmday==24 for every 24th 
AMD[.indexmon(AMD)==11 & .indexmday(AMD)==24] 
#   AMD.Open AMD.High AMD.Low AMD.Close AMD.Volume 
#2007-12-24  7.78  7.88 7.68  7.77 9193719 
#2008-12-24  1.98  2.03 1.97  1.99 2912312 
#2009-12-24  9.79  9.95 9.78  9.91 11331966 
#2012-12-24  2.54  2.57 2.47  2.48 9625363 
#2013-12-24  3.77  3.80 3.75  3.77 5798855 
#2014-12-24  2.63  2.70 2.63  2.65 4624005 
#2015-12-24  2.88  3.00 2.86  2.92 11900888 
+0

죄송합니다, I는 입력 한 후 "AMD.Open AMD.High AMD.Low AMD.Close AMD.Volume" 을 얻을 AMD [.indexmon (AMD) == 11 .indexmday (AMD) == 24]. 내가 무엇이 누락 되었습니까? –

+0

네, 이것들은'getSymbols ('AMD', src = 'google')'과 정확히 같은 열입니다. 너는 무엇을 기대 했는가? – LyzandeR

+0

예제와 같이 데이터 행을 가져 오지 않아야합니까? –

1

LyzandeR의 답변을 추가하기 만하면 데이터를 추첨으로 변환하고 lubridate을 사용할 수도 있습니다. :

library(tidyverse) 
library(lubridate) 
library(quantmod) 

getSymbols('AMD',src='google') 

AMD %>% as_tibble() %>% rownames_to_column("date") %>% 
    filter(month(date) == 12, day(date) == 24) 

     date AMD.Open AMD.High AMD.Low AMD.Close AMD.Volume 
     <chr> <dbl> <dbl> <dbl>  <dbl>  <dbl> 
1 2007-12-24  7.78  7.88 7.68  7.77 9193719 
2 2008-12-24  1.98  2.03 1.97  1.99 2912312 
3 2009-12-24  9.79  9.95 9.78  9.91 11331966 
4 2012-12-24  2.54  2.57 2.47  2.48 9625363 
5 2013-12-24  3.77  3.80 3.75  3.77 5798855 
6 2014-12-24  2.63  2.70 2.63  2.65 4624005 
7 2015-12-24  2.88  3.00 2.86  2.92 11900888 
+0

너무 좋네 – LyzandeR

+0

많이 배우기. 감사! –