【问题标题】:R for Loop Add Value to New ColumnR for 循环将值添加到新列
【发布时间】:2018-03-13 17:07:36
【问题描述】:

我正在尝试在 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

【问题讨论】:

  • 显示模拟数据。
  • 你需要df_financials$Last_Price[i]=bdp(i, 'PX_Last')。就目前而言,您正在尝试用单个值替换整个列。但是还有更直观的命令可以做同样的事情,比如dplyrmutate 函数,如下面的 Lyngbakr 评论所示。注意你需要在dplyr之前安装plyr
  • 如果bdp 是矢量化的,你可以像df_financials %&gt;% mutate(Last_Price = bdp(Ticker, 'PX_LAST')) 这样使用dplyr 包。

标签: r for-loop


【解决方案1】:

您首先需要指定将命令应用于所述向量的顺序以及何时停止[即,在for() 中使用1:length(df$Var)]。其次,指定要替换新列的哪一行 (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'))
}

【讨论】:

  • 直觉上我知道你在说什么。由于某种原因,该代码不再将 i 注册为字符串,因此无法提取“PX-LAST”。如果我运行它,我会得到“期待一个字符串向量:[type=integer; required=STRSXP]。”如果我打印 i,它会返回每一行的索引
猜你喜欢
  • 2015-11-28
  • 1970-01-01
  • 2019-08-04
  • 1970-01-01
  • 2017-06-14
  • 2016-01-31
  • 2020-08-12
  • 1970-01-01
  • 2016-08-25
相关资源
最近更新 更多