R for Loop将值添加到新列

时间:2018-03-13 17:07:37

标签: r for-loop

我正在尝试在R数据框中运行for循环以提取股票数据框的最后价格。我无法将结果附加到原始数据框并将其用作第二列。这是我到目前为止使用的代码。我可以打印但不添加到新列。我试图将循环值设置为等于新列,但我收到错误

    for (i in df_financials$Ticker){
      df_financials$Last_Price=(bdp(i,'PX_LAST'))

     }


    Error in `$<-.data.frame`(`*tmp*`, "Last_Price", value = list(PX_LAST = 
    NA_real_)) : 
    replacement has 1 row, data has 147 


Print(df_financials)

    Ticker
1     ENH Equity
2     AXS Equity
3     BOH Equity
4     CNA Equity
5     TRH Equity

1 个答案:

答案 0 :(得分:0)

首先需要指定将命令应用于指定向量的顺序以及何时停止[即,在1:length(df$Var)中使用for()]。其次,指定要替换的新列的哪一行(i)(即df$var[i])。试试下面的代码,看看是否有效。

for (i in 1:length(df_financials$Ticker)){
  df_financials$Last_Price[i]=(bdp(i,'PX_LAST'))
}

我不熟悉bdp()函数本身。但是,我怀疑 问题是你试图从列表中提取的数据超过你感兴趣的股票。如果是这种情况,你需要引用第i行中你想获得最后价格的股票。如果我正确地理解了这一点,下面的代码应该可以解决问题。

我会假设列表类似于

Stock<-data.frame(other_stocks = c("ENH","AXS","Rando1","BOH","CNA","TRH","Rando2","Rando3"), 
PX_LAST=c(1,2,3,4,5,6,7,8))

股票

for (i in 1:length(df$Ticker)){
    df$Last_Price[i]=(bdp(df$Ticker[i],'PX_LAST'))
}