我在数据框中有一个列,包括诸如AAPL(Apple股票),TWTR(Twitter)等股票代码。我正在尝试创建一个新列,它将返回从股票API数据计算出的每个股票代码的股票数量。
但是当我运行下面的代码时,新列“Stock Quantity”为每一行返回了NA。有人有解决方案吗?
library(Quandl)
portfolio <- data.frame(Code=c("AAPL", "TWTR", "MSFT"),
startingPeriod=c("2015-01-01", "2015-01-01", "2015-01-01"),
Investment=c("5000", "10000", "15000"),
stringsAsFactors=FALSE)
numberofStock <- function(pf) {
API <- Quandl(paste0("WIKI/", pf$Code), type = "raw",
start_date = pf$startingPeriod, end_date=Sys.Date())
pf["StockQuantity"] <- floor(pf$Investment_01 / tail(API$Open,1))
return(pf)
}
numberofStock(portfolio)
答案 0 :(得分:0)
您可能希望首先使用portfolio$startingPeriod
将Date
转换为数据类型as.Date
。此外,您将两个向量portfolio$Code
和portfolio$startingPeriod
传递给函数Quandl()
。您可能希望尝试使用lapply()
函数来迭代这两个函数的每个值。
编辑:您还需要使用portfolio$Investment
将numeric
转换为as.numeric()
。以下是代码的外观:
portfolio <- data.frame(Code=c("AAPL", "TWTR", "MSFT"),
startingPeriod=as.Date(c("2015-01-01", "2015-01-01", "2015-01-01")),
Investment=as.numeric(c("5000", "10000", "15000")),
stringsAsFactors=FALSE)
numberofStock <- function(pf) {lapply(seq_along(nrow(portfolio)), function(x){
API <- Quandl(paste0("WIKI/", pf$Code[x]), type = "raw",
start_date = pf$startingPeriod[x], end_date=Sys.Date())
pf["StockQuantity"] <- floor(pf$Investment[x] / tail(API$Open,1))
return(pf)
})
}
numberofStock(portfolio)
答案 1 :(得分:0)
这是一个开始。
library(dplyr)
company.initial =
portfolio %>%
mutate(Investment = as.numeric(Investment) ) %>%
group_by(Code) %>%
summarize(start_date = min(startingPeriod),
total_investment = sum(Investment) )
company__date =
company.initial %>%
group_by(Code) %>%
do(with(.,
Quandl(paste0("WIKI/", Code),
type = "raw",
start_date = start_date,
end_date = Sys.Date() ) ) )
company =
company__date %>%
group_by(Code) %>%
summarize(last_open = last(Open)) %>%
left_join(company.initial) %>%
mutate(StockQuantity = total_investment / last_open)