2013-12-23 3 views
4

xts 개체가 포함 된 특정 유형의 목록/데이터 프레임을 만들려고 미친 듯이 가고 있습니다.R : xts 개체의 동적 목록 만들기

나는 quantmod 패키지의 getSymbols 함수를 사용하여 문자열의 벡터 (각각 경제적 인 "ticker")를 통해 반복을 시도하고 각각에 대해 xts 객체를 만듭니다 (각 "ticker"에 따라 길이가 다릅니다). 그런 다음 각 xts 객체를 데이터 프레임에서 하나의 데이터 요소로 만들고 싶습니다. 또한 데이터 프레임에 관련 데이터 (예 : 각 xts 객체의 최대 날짜, 다른 곳에서 지정하는 "제목"등)를 가질 계획이지만 직접 처리 할 수도 있습니다.

그냥 xts 개체 목록을 만들려고 노력하는 것이 내 마음을 끌고 있습니다. 방금 이런 식으로 시도하면 문자열 목록을 얻는 편이 낫습니다.

test <- list() 

for (i in 1:length(fredTickers)) 
{# import Data from FRED database 
    # this creates a list of strings, I'm hoping for list of xts objects... 
    test[i] <- getSymbols(fredTickers[i],src="FRED") 
    # xts objects are created for each, but not assigned to the list 
} 

# this creates an xts object named EVANQ. 
# The test2 object is just a string with value "EVANQ". 
test2 <- getSymbols("EVANQ",src="FRED") 

이 xts 개체를 다루는 것이 내 마음을 끌고 있습니다. 나는 많은 트릭을 시도했다.

도움 주셔서 감사합니다.

답변

6

기본적으로 개체는 전역 환경에 할당되며 명시 적으로 반환되지 않습니다. 그 반대의 경우 auto.assign = FALSE를 지정하십시오. 또한 '['와 '[['.

tickers <- c("F", "YHOO") 
test <- list() 

for (i in 1:length(tickers)) { 
    test[[i]] <- getSymbols(tickers[i], src="yahoo", auto.assign=FALSE, return.class="xts") 
} 

head(test[[1]]) 
      F.Open F.High F.Low F.Close F.Volume F.Adjusted 
2007-01-03 7.56 7.67 7.44 7.51 78652200  7.18 
2007-01-04 7.56 7.72 7.43 7.70 63454900  7.36 
2007-01-05 7.72 7.75 7.57 7.62 40562100  7.29 
2007-01-08 7.63 7.75 7.62 7.73 48938500  7.39 
2007-01-09 7.75 7.86 7.73 7.79 56732200  7.45 
2007-01-10 7.79 7.79 7.67 7.73 42397100  7.39 

class(test[[1]]) 
[1] "xts" "zoo" 
+0

대단히 감사합니다. –

-1

불행하게도 R의 행렬에는 문자열을 사용할 수 없습니다. 행렬 데이터 구조는 동일하므로 전체 데이터가 동일한 클래스 여야합니다. 이 작업에 데이터 프레임을 사용해야하고 운이 좋다. 여러 자산을 관리하는 tidyquant 패키지를 사용해보십시오. for-loops를 필요로하지 않으므로 상당한 양의 코드를 저장할 수 있습니다. tq_get() 함수는 주가를 얻는 책임이 있습니다. 다음은 주식 가격의 간단한 예입니다. FRED 기호 (아래 참조)를 사용하여 동일한 작업을 수행 할 수 있습니다. FRED 데이터를 얻기

library(tidyquant) 

# Get some stock prices for multiple stocks 
c("FB", "GOOG", "AMZN", "NFLX") %>% 
    tq_get(get = "stock.prices", 
      from = "2013-01-01", 
      to = "2016-12-31") 
#> # A tibble: 4,032 × 8 
#> symbol  date open high low close volume adjusted 
#>  <chr>  <date> <dbl> <dbl> <dbl> <dbl>  <dbl> <dbl> 
#> 1  FB 2013-01-02 27.44 28.18 27.42 28.00 69846400 28.00 
#> 2  FB 2013-01-03 27.88 28.47 27.59 27.77 63140600 27.77 
#> 3  FB 2013-01-04 28.01 28.93 27.83 28.76 72715400 28.76 
#> 4  FB 2013-01-07 28.69 29.79 28.65 29.42 83781800 29.42 
#> 5  FB 2013-01-08 29.51 29.60 28.86 29.06 45871300 29.06 
#> 6  FB 2013-01-09 29.67 30.60 29.49 30.59 104787700 30.59 
#> 7  FB 2013-01-10 30.60 31.45 30.28 31.30 95316400 31.30 
#> 8  FB 2013-01-11 31.28 31.96 31.10 31.72 89598000 31.72 
#> 9  FB 2013-01-14 32.08 32.21 30.62 30.95 98892800 30.95 
#> 10  FB 2013-01-15 30.64 31.71 29.88 30.10 173242600 30.10 
#> # ... with 4,022 more rows 

:

얻기 주가

library(tidyquant) 

# Get some economic data for multiple FRED codes 
c("CPIAUCSL", "A191RL1Q225SBEA", "IC4WSA") %>% 
    tq_get(get = "economic.data") 
#> # A tibble: 691 × 3 
#>  symbol  date price 
#>  <chr>  <date> <dbl> 
#> 1 CPIAUCSL 2007-01-01 203.437 
#> 2 CPIAUCSL 2007-02-01 204.226 
#> 3 CPIAUCSL 2007-03-01 205.288 
#> 4 CPIAUCSL 2007-04-01 205.904 
#> 5 CPIAUCSL 2007-05-01 206.755 
#> 6 CPIAUCSL 2007-06-01 207.234 
#> 7 CPIAUCSL 2007-07-01 207.603 
#> 8 CPIAUCSL 2007-08-01 207.667 
#> 9 CPIAUCSL 2007-09-01 208.547 
#> 10 CPIAUCSL 2007-10-01 209.190 
#> # ... with 681 more rows 

선택할 수있는 옵션의 무리가있다. 나는 그것들을 "게터"라고 부르며 선택할 수있는 데이터 소스는 대부분 quantmod입니다. 행운을 빕니다!