r语言 - 我如何保留所有的列,而使用tq_transmute()函数?



我试图在r中复制交易策略和回试,但是,我在tq_transmute()函数上有一个小问题。如有任何帮助,不胜感激。

所以,我有下面的代码,我现在已经写了:

#Importing the etfs data
symbols<- c("SPY","XLF","XLE")
start<-as.Date("2000-01-01")
end<- as.Date("2018-12-31")

price_data<- lapply(symbols, function(symbol){
etfs<-as.data.frame(getSymbols(symbol,src="yahoo", from=start, to= end, 
auto.assign = FALSE))
colnames(etfs)<- c("Open", "High","Low","Close","volume","Adjusted")
etfs$Symbol<- symbol
etfs$Date<- rownames(etfs)
etfs
})

# Next, I used do.call() with rbind() to combine the data into a single data frame   

etfs_df<- do.call(rbind, price_data)

#This because of POSIXct error
daily_price<- etfs_df %>%
mutate(Date=as.Date(Date, frac=1)) 
# I have deleted some columns of the table as my work only concerned the "Adjusted" column. 
#So, until now we have:

head(daily_price)

Adjusted Symbol       Date
1 98.14607    SPY 2000-01-03
2 94.30798    SPY 2000-01-04
3 94.47669    SPY 2000-01-05
4 92.95834    SPY 2000-01-06
5 98.35699    SPY 2000-01-07
6 98.69440    SPY 2000-01-10

#Converting the daily adjusted price to monthly adjusted price

monthly_price<- 
tq_transmute(daily_price,select = Adjusted, mutate_fun = to.monthly, indexAt = "lastof")

head(monthly_price)

# And now, I get the following table: 

# A tibble: 6 x 2
Date       Adjusted
<date>        <dbl>
1 2000-01-31     16.6
2 2000-02-29     15.9
3 2000-03-31     17.9
4 2000-04-30     17.7
5 2000-05-31     19.7
6 2000-06-30     18.6

所以,正如你所看到的,日期和调整后的价格已经成功地转换为每月的数字,但我的符号栏已经消失了。谁能告诉我为什么会发生这种情况,我怎么把它拿回来?

谢谢。

Symbol分组,应用tq_transmute

library(dplyr)
library(quantmod)
library(tidyquant)
monthly_price <- daily_price %>%
group_by(Symbol) %>%
tq_transmute(daily_price,select = Adjusted, 
mutate_fun = to.monthly, indexAt = "lastof")
#  Symbol Date       Adjusted
#   <chr>  <date>        <dbl>
# 1 SPY    2000-01-31     94.2
# 2 SPY    2000-02-29     92.7
# 3 SPY    2000-03-31    102. 
# 4 SPY    2000-04-30     98.2
# 5 SPY    2000-05-31     96.6
# 6 SPY    2000-06-30     98.5
# 7 SPY    2000-07-31     97.0
# 8 SPY    2000-08-31    103. 
# 9 SPY    2000-09-30     97.6
#10 SPY    2000-10-31     97.2
# … with 674 more rows

我会这样做:

symbols <- c("SPY", "XLF", "XLE")
start <- as.Date("2000-01-01")
end <- as.Date("2018-12-31")
# Environment to hold data
my_data <- new.env()
# Tell getSymbols() to load the data into 'my_data'
getSymbols(symbols, from = start, to = end, env = my_data)
# Combine all the adjusted close prices into one xts object
price_data <- Reduce(merge, lapply(my_data, Ad))
# Remove "Adjusted" from column names
colnames(price_data) <- sub(".Adjusted", "", colnames(price_data), fixed = TRUE)
# Get the last price for each month
monthly_data <- apply.monthly(price_data, last)
# Convert to a long data.frame
long_data <- fortify.zoo(monthly_data,
names = c("Date", "Symbol", "Adjusted"), melt = TRUE)

相关内容

  • 没有找到相关文章

最新更新