我试图在 R 中解决以下问题。我有一个包含 4 列的数据框:currency_1_amt
、currency_1_denom
、currency_2_amt
、 currency_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/