使用lapply在多个数据框架中查找单个均值 - 错误的维数不正确

时间:2016-05-18 05:06:44

标签: r quantmod

我有多个数据框,其中包含以下形式的股票市场数据:

Open High Low Close Volume

我试图获得每个股票最后一行的平均值(在给定时间内)并将它们组合成一个数据框,如下所示:

Name SMA
StockA 15.1
StockB 34.44

我有一个简单的函数来计算平均值并正确格式化。它适用于我在单一股票(数据帧)上运行它。但是,当我尝试使用lapply将函数应用于所有数据帧的列表时,我收到错误:

x [,关闭]出错:维数不正确。

符号是所有股票数据框的列表。

非常感谢任何帮助。

require(TTR)
require(quantmod)

symbols <- c("XLF", "XLK", "XLU", "XLE", "XLP", "XLF", "XLB", "XLV", "XLY")
getSymbols(symbols, src='yahoo', from = '2016-01-01')

fun1<-function(x,Close) {
  mean1<-SMA(x[,Close],5)
  mean2<-tail(mean1,1)
  df_name<-deparse(substitute(x))
  print(mean2,paste(df_name))
}

df<-lapply(symbols,fun1)
final_df <- do.call(rbind, df)

1 个答案:

答案 0 :(得分:0)

问题似乎是在获取正在运行的移动平均值(SMA)的最后一个值(尾部)并且在合并/合并数据帧之前在函数内添加名称。如果在合并数据帧之后完成所有操作,那么它似乎可以正常工作。

require(TTR)
require(quantmod)

symbols <- c("XLF", "XLK", "XLU", "XLE", "XLP", "XLF", "XLB", "XLV", "XLY")

StartDate = '2016-01-01'

Stocks = lapply(symbols, function(sym, column) {
  SMA(na.omit(getSymbols(sym, from=StartDate, auto.assign=FALSE))[,4],5)
})

test<-do.call(merge, Stocks)
test2<-tail(test,1)
test3<-t(test2)
rownames(test3)<-symbols
colnames(test3)<-"SMA"
View(test3)