根据向量 C 或 D 的值从向量 A 或 B 返回元素

标签 r vectorization

我试图在 R 中解决以下问题。我有一个包含 4 列的数据框:currency_1_amtcurrency_1_denomcurrency_2_amtcurrency_2_denom。这是该表中的几行

|----------------|------------------|----------------|------------------|
| currency_1_amt | currency_1_denom | currency_2_amt | currency_2_denom |
|----------------|------------------|----------------|------------------|
| 100            | USD              | 620            | CNY              |
| 500            | CNY              | 80.55          | USD              |
| 80.55          | INR              | 1              | USD              |
| 100            | INR              | 9.67           | CNY              |

我正在尝试计算每一行的名义值(value):

  • 如果 currency_1_denom == "USD",则 notional value=currency_1_amt

  • 如果 currency_2_denom == "USD",则 notional value=currency_2_amt

  • 如果 currency_1_denom == "USD"currency_1_denom == "USD"notional_value = currency_1_amt * exchange_rate_of_currency_1_to_USD(我在数据框中有另一列具有相关汇率。

我不确定如何在不遍历每一行的情况下在 R 中执行此操作。 Heer 是我想出的一些伪 R 代码

result = numeric(length(df))
for(j in 1:length(df)) {
    if(df[j,"currency_1_denom"] == "USD")
        result[j] = currency_1_amt
   else if(df[j,"currency_2_denom"] == "USD")
       result[j] = currency_2_amt
   else
       result[j] = currency_1_amt * lookup_exchange_rate(currency_1_denom)

是否有更好的(例如矢量化)方法来完成我的任务?

最佳答案

重新创建您的数据:

df<- read.table(text ="currency_1_amt currency_1_denom currency_2_amt  currency_2_denom
100            USD              620             CNY            
500            CNY              80.55           USD            
80.55          INR              1               USD            
100            INR              9.67            CNY",
           header = TRUE, stringsAsFactors = FALSE)

创建示例汇率只是为了运行示例:

df$exchange_rate_of_currency_1_to_USD <- 1:4

使用ifelse:

df$notional_value <- with(df, ifelse(currency_1_denom == "USD", currency_1_amt, 
                                     ifelse(currency_2_denom == "USD", currency_2_amt,
                                            currency_1_amt * exchange_rate_of_currency_1_to_USD)))

关于根据向量 C 或 D 的值从向量 A 或 B 返回元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30893198/

相关文章:

R markdown 代码显示我不想要的输出,如何删除它?

R - 根据条件求和并合并列

matlab - 从没有循环的3D矩阵中过滤元素

python - NumPy 中切片的不同起始索引

c++ - 我可以将AVX/SSE用作AoS布局而不是SoA吗?

r - 向量化 data.table 之类的、grepl 或类似的以进行大数据字符串比较

r - 如何使用 R 计算行的平均值

r - 如何反转 R Tmap 中发散的调色板?

c - 如何将 SIMD int vector 转换为在 GCC 中 float ?

python - "Reduce"系列功能