0

AAPL (Apple 株の場合)、TWTR (Twitter の場合) などのティッカー コードで構成されるデータフレームに 1 つの列があります。株式 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) 
4

2 に答える 2

0

を使用しportfolio$startingPeriodてデータ型に変換することから始めることをお勧めします。また、2 つのベクトルとを関数 に渡しています。関数を使用して、これら 2 つの関数の各値を反復処理してみてください。Dateas.Dateportfolio$Codeportfolio$startingPeriodQuandl()lapply()

編集: usingに変換portfolio$Investmentする必要もあります。コードは次のようになります。numericas.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)
于 2016-04-30T16:05:54.240 に答える
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)
于 2016-04-30T16:13:08.697 に答える