将Excel函数转换为R

时间:2012-07-03 18:30:27

标签: excel r for-loop dataframe finance

我有两个excel函数,我试图将其转换为R:

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美元(股数*收盘价)

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

到目前为止,在R中我构建了一个包含必要的四列的数据帧: data.frame

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

再次,谢谢!!

1 个答案:

答案 0 :(得分:3)

将AND()转换为中缀“&”; “=”到“==”;并且if到ifelse()并且你在那里。问题在于将单元格引用转换为数组或矩阵引用,对于该任务,我们需要更好地描述数据布局:

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功能:

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中肯定是不必要的。)