【发布时间】:2019-09-26 20:30:22
【问题描述】:
跨数据框列应用函数的正确方法是什么?
我有一些类似以下的数据:
我想为每一列计算一个简单的移动平均值。我可以使用lapply,但它会将数据作为列表,如果可能的话,我想创建新列或新数据框。
我尝试过sapply、mapply 等。
数据:
require(quantmod)
require(PerformanceAnalytics)
library(data.table)
from <- "2017-01-01"
to <- "2018-12-01"
symbols <- c('GOOG', 'MSFT', 'AAPL')
dataEnv <- new.env()
getSymbols(symbols, from=from, to = to, src = "yahoo", adjust = TRUE, env = dataEnv)
data <- do.call(merge, eapply(dataEnv, Ad))
colnames(data) <- gsub(".Adjusted", "", colnames(data))
x <- lapply(data, function(x) SMA(x, n = 10))
例如,这会创建一个新列:
data$googleSMA <- SMA(data$GOOG)
【问题讨论】:
-
如果你使用
lapply,你可以使用df[] <- lapply(df, yourfunction) -
使用它创建一个包含 1449 个观察值的列表
-
data[] <- lapply(data, function(x) SMA(x, n = 10)) -
抱歉!不需要
quantstrat包!我现在将使用所需的唯一软件包编辑原始帖子。 -
好的,添加了必要的包,
quantmod包用于从 Yahoo Finance 获取数据,PerformanceAnalytics用于计算SMA和data.table用于计算do.call(merge, eapply(dataEnv, Ad))(我认为)。
标签: r