2

我有两个要转换为 R 的 excel 函数:

numberShares
=IF(AND(N213="BOH",N212="BOH")=TRUE,P212,IF(AND(N213="BOH",N212="Sell")=TRUE,ROUNDDOWN(Q212/C213,0),0))

marketValue
=IF(AND(N212="BOH",N213="BOH")=TRUE,C213*P212,IF(AND(N212="Sell",N213="Sell")=TRUE,Q212,IF(AND(N212="BOH",N213="Sell")=TRUE,P212*C213,IF(AND(N212="Sell",N213="BOH")=TRUE,Q212))))

引用的单元格包括:

  • c = 股票收盘价
  • n =“买入或持有”或“卖出”的头寸值
  • p = 股数
  • q = 市场价值,假设初始股本为 10,000 美元(股票数量*收盘价)

我试图重新创建的两个输出列的顶部如下所示

到目前为止,在 RI 中已经构建了一个包含必要四列的数据框: data.frame

我只是不知道如何编写将填充股票数量和市值列的函数。对于循环?如果别的?

再次谢谢你!!

4

1 回答 1

4

将 AND() 隐藏为中缀“&”;“=”到“==”;和 ifelse() 的 IF,你就到了一半。问题在于将单元格引用转换为数组或矩阵引用,对于该任务,我们需要更好地描述数据布局:

numberShares <- 
  ifelse( N213=="BOH" & N212=="BOH",  
         #Perhaps PosVal[213] == "BOH" & PosVal[212] == "BOH"
      # ... and very possibly the 213 should be 213:240 and the 212 should be 212:239
             P212, 
             ifelse( N213=="BOH" & N212=="Sell" ,
                         round(Q212/C213, digits=0),
                         0))

(您似乎返回了不相称的值,这似乎令人怀疑。)假设这是正确的代码,尽管我有疑虑,下一个翻译涉及在此结构中应用相同的替换(尽管您似乎在最后一个 IF 函数中缺少一个 else-consequent:

marketValue <- 
 IF( AND(N212="BOH", N213="BOH")=TRUE, 
           C213*P212, 
           IF(AND(N212="Sell",N213="Sell")=TRUE, 
                     Q212, 
                     IF( AND(N212="BOH",N213="Sell")=TRUE, 
                            P212*C213, 
                            IF(AND(N212="Sell",N213="BOH")=TRUE, 
                                         Q212))))

(我认为您的测试AND( .,.)=TRUE在 Excel 中是不必要的,在 R 中当然是不必要的。)

于 2012-07-03T18:56:23.680 回答