【问题标题】:Converting Excel functions into R将 Excel 函数转换为 R
【发布时间】:2012-07-04 05:51:53
【问题描述】:

我有两个要转换为 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 美元(股数 * 收盘价)

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

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

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

再次感谢您!

【问题讨论】:

  • 您与ifelse() 走在了正确的轨道上。另请查看?Logic?Comparison?round。您应该或多或少能够直接浏览现有代码,将内容替换为 R 等效项,它会起作用。
  • 我建议使用更传统的if {} else {} 语句。 ifelse() 并不总是以直观的方式发挥作用。
  • @BrandonBertelsen 我同意,了解ififelse 之间的区别很重要。 if 应该用于控制语句,它接受一个逻辑参数,而ifelse 接受一个向量参数。

标签: excel r for-loop dataframe finance


【解决方案1】:

将 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))

(您似乎返回了不相称的值,这似乎令人怀疑。)假设这是正确的代码,尽管我有疑虑,下一个翻译涉及在此结构中应用相同的替换(尽管您似乎在最后一个中缺少一个 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 中当然是不必要的。)

【讨论】:

  • 谢谢!我对excel中的条件语句也很陌生,哈哈我如何引用R中的单元格,例如“上一个位置”。我已经构建了一个包含所有适当数据的数据框,在您的帮助下可能
  • 谢谢!我也是 excel 条件语句的新手!如何引用 R 中的单元格,例如“上一个位置”。我已经构建了一个包含所有适当数据的数据框 i.imgur.com/BAyJR.png>,但不知道如何区分 Df$position[i] 和 Df$position[i-1]
  • R 中没有“前一个位置”的概念。Reduce 函数允许您沿向量“滚动”。可以使用 for 循环。您还可以使用vec[-length(vec)] - vec[-1] 从(缩短的)向量中减去移位向量。如果操作是“-”,当然有diff 函数可以一次性完成所有操作。还有一个非常有用的函数叫做“embed”。
猜你喜欢
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
  • 2014-05-27
  • 1970-01-01
  • 2020-07-23
  • 2022-01-03
相关资源
最近更新 更多