我正在尝试创建一个向量,列出使用quantmod抓取数据的多家公司的最新年度收入数字。我的最终目标是建立一个数据框,列出第一列中的每个股票代码和第二列中相应的年度收入数字。我的计划是使用以下方法创建数据框:
data.frame(tickers.list, revenue)
我目前编写的脚本是为每个股票代码提取财务报表,但我不确定如何创建包含每个股票代码收入数字的向量。
以下是我目前的情况:
tickers.list <- c("AAPL", "FB", "F")
tickers.statements.function <- function (tickers.list) {
getFin(tickers.list, source = "yahoo", auto.assign = "FALSE")
}
fin.f <- lapply(tickers.list, tickers.statements.function)
我是否可以使用循环创建向量来提取所有代码的收入数据?
感谢您的帮助。
编辑:这是我到目前为止找到的解决方案 - 有更优雅的方法来实现这个目标吗?
#Creating Ticker List
tickers.list <- c("AAPL", "FB", "F")
#Getting Financial Statements
tickers <- new.env()
lapply(tickers.list, getFinancials,env=tickers)
#Current-Year Revenue Vector
CY.revenue.list <- eapply(tickers, function(x)
x$IS$A["Revenue", 1])
CY.revenue.vector <- unlist(CY.revenue.list, use.names = TRUE)
#1-Year Prior Revenue Vector
PY1.revenue.list <- eapply(tickers, function(x)
x$IS$A["Revenue", 2])
PY1.revenue.vector <- unlist(PY1.revenue.list, use.names = TRUE)
#2-Year Prior Revenue Vector
PY2.revenue.list <- eapply(tickers, function(x)
x$IS$A["Revenue", 3])
PY2.revenue.vector <- unlist(PY2.revenue.list, use.names = TRUE)
#3-Year Prior Revenue Vector
PY3.revenue.list <- eapply(tickers, function(x)
x$IS$A["Revenue", 4])
PY3.revenue.vector <- unlist(PY3.revenue.list, use.names = TRUE)
#Creating Data Frame
fin.data <- data.frame(tickers.list, CY.revenue.vector,
+ PY1.revenue.vector, PY2.revenue.vector,
+ PY3.revenue.vector)
print(fin.data)
答案 0 :(得分:1)
您可以使用sapply
来提取收入:
revenues <- as.data.frame(sapply(1:length(tickers.list),function(x) as.data.frame(fin.f[[x]][[1]][1]) %>% .[1,]))
revenues <- as.data.frame(t(do.call(rbind,revenues)))
names(revenues) <- tickers.list
revenues
AAPL FB F
Q.2017.07.01 45408 9321 39853
Q.2017.04.01 52896 8032 39146
Q.2016.12.31 78351 8809 38654
Q.2016.09.24 46852 7011 35943
Q.2016.06.25 42358 6436 39485