Обработка объектов xts, содержащих специальные символы

#r #yahoo-finance #yahoo-api #tidyquant

Вопрос:

Я хотел бы получить финансовые данные от Yahoo с помощью tidyquant пакета (или любого другого пакета).

Для получения цен закрытия Microsoft (индекс: MSFT) следующий код работает нормально:

 #load packages
library(tidyquant)

#acquire monthly average stock prices
getSymbols("MSFT", from = "2000-08-01", to = "2021-07-31", src = 'yahoo', periodicity = 'daily')
output <- aggregate(MSFT$MSFT.Close, list(format(index(MSFT), "%Y-%m")), mean)
colnames(output) <- c('ClosingPrice')

#create time series for closing stock prices
price = ts(output$ClosingPrice, frequency=12, start=c(2000,08))
summary(price)
 

Однако для получения цен на сырую нефть (индекс: CL=F) это не работает, так как индекс содержит специальный символ. Более конкретно, я получаю сообщение об ошибке здесь:

 #acquire monthly average stock prices
getSymbols("CL=F", from = "2000-08-01", to = "2021-07-31", src = 'yahoo', periodicity = 'daily')
output <- aggregate(CL=F$CL=F.Close, list(format(index(MSFT), "%Y-%m")), mean)
 

У кого-нибудь есть идея, как обойти эту проблему? Большое спасибо!

Ответ №1:

Имена объектов со специальными символами могут быть закавычены. Кроме того, если есть NA значения, укажите na.rm = TRUE вместе с na.action = NULL как aggregate можно удалить всю строку, если она есть NA в любом из столбцов

 out <- aggregate(`CL=F`
 #r #yahoo-finance #yahoo-api #tidyquant



Вопрос:

Я хотел бы получить финансовые данные от Yahoo с помощью tidyquant пакета (или любого другого пакета). Для получения цен закрытия Microsoft (индекс: MSFT) следующий код работает нормально:
 #load packages
library(tidyquant)

#acquire monthly average stock prices
getSymbols("MSFT", from = "2000-08-01", to = "2021-07-31", src = 'yahoo', periodicity = 'daily')
output <- aggregate(MSFT$MSFT.Close, list(format(index(MSFT), "%Y-%m")), mean)
colnames(output) <- c('ClosingPrice')

#create time series for closing stock prices
price = ts(output$ClosingPrice, frequency=12, start=c(2000,08))
summary(price)
 

Однако для получения цен на сырую нефть (индекс: CL=F) это не работает, так как индекс содержит специальный символ. Более конкретно, я получаю сообщение об ошибке здесь:

 #acquire monthly average stock prices
getSymbols("CL=F", from = "2000-08-01", to = "2021-07-31", src = 'yahoo', periodicity = 'daily')
output <- aggregate(CL=F$CL=F.Close, list(format(index(MSFT), "%Y-%m")), mean)
 

У кого-нибудь есть идея, как обойти эту проблему? Большое спасибо!

Ответ №1:

Имена объектов со специальными символами могут быть закавычены. Кроме того, если есть NA значения, укажите na.rm = TRUE вместе с na.action = NULL как aggregate можно удалить всю строку, если она есть NA в любом из столбцов

CL=F.Close`, list(format(index(`CL=F`), "%Y-%m")),
mean, na.rm = TRUE, na.action = NULL)

-выход

 > head(out)
                
2000-08 32.54571
2000-09 33.87100
2000-10 32.97318
2000-11 34.26450
2000-12 28.35500
2001-01 29.26667
> tail(out)
                
2021-02 59.06105
2021-03 62.35739
2021-04 61.70381
2021-05 65.15700
2021-06 71.35273
2021-07 72.43048
 

Комментарии:

1. Большое спасибо! Не могли бы вы кратко объяснить разницу между обычными кавычками и обратными цитатами?

2.@natalieee, если проверишь ?Quotes Backticks are used for non-standard variable names. . Допустимые имена имеют подчеркивание наряду с буквенно-цифровыми символами. Объекты, начинающиеся с цифр, также являются нестандартными

3. Ладно, твое здоровье.. узнал что-то новое!