R:按行和列匹配

时间:2015-06-04 13:05:23

标签: r match rows

我有两个数据框,如下所示:
EquityData

ValuationDate   Currency    Opening Closing
02/01/2003        CHF          0    0
02/01/2003        DKK          0    0
03/01/2003        CHF          0    0
02/01/2003        SEK          0    0
03/01/2003        SEK          0    0
04/01/2003        SEK          0    0
05/01/2003        CHF          0    0
03/01/2003        DKK          0    0

其中包含每天以不同货币进行的交易的信息 和HistoricalFX

Date        CHF        X      DKK     X.1     SEK    X.2
02/01/2003  0.6885  0.688   0.1347  0.1346  0.1094  0.1096
03/01/2003  0.688   0.6858  0.1346  0.1345  0.1096  0.1099
04/01/2003  0.6858  0.6858  0.1345  0.1345  0.1099  0.1099
05/01/2003  0.6858  0.6858  0.1345  0.1345  0.1099  0.1099

其中包含历史汇率,开盘价低于货币自动收报机,以及其旁边栏中的收盘价。

我试图在EquityData数据框中获得相应的FX价格。

我尝试过以下哪项有效,但显然效率很低:

 openExchangeMatch = match(EquityData$Currency,colnames(HistoricalFX))
  closeExchangeMatch = match(EquityData$Currency,colnames(HistoricalFX))+1
  dateMatch = match(EquityData$ValuationDate,HistoricalFX$Date)
  for (i in 1:nrow(EquityData))
  {
    EquityData$OpenExchange[i] = HistoricalFX[dateMatch[i],openExchangeMatch[i]]
    EquityData$closeExchange[i] = HistoricalFX[dateMatch[i],closeExchangeMatch[i]]
  }

关于如何以更好的方式解决上述问题的任何想法?

1 个答案:

答案 0 :(得分:4)

我们在对第二个数据集进行子集化后创建了一个行/列索引(' indx1')(' df2'即#F; HistoricalFX'),分配&#39 ;开放'和'结束'第一个数据集中的列(' df1'即' EquityData'),其中包含我们使用' indx1' in' op1'和' cl1'

left(Time, 2)

数据

op1 <-  df2[-1][c(TRUE, FALSE)]
cl1 <-  df2[-1][c(FALSE, TRUE)]
names(cl1) <- names(op1)
indx1 <- cbind(match(df1$ValuationDate, df2$Date),
              match(df1$Currency, names(op1)))
df1$Opening <- op1[indx1]
df1$Closing <- cl1[indx1]
df1
#  ValuationDate Currency Opening Closing
#1    02/01/2003      CHF  0.6885  0.6880
#2    02/01/2003      DKK  0.1347  0.1346
#3    03/01/2003      CHF  0.6880  0.6858
#4    02/01/2003      SEK  0.1094  0.1096
#5    03/01/2003      SEK  0.1096  0.1099
#6    04/01/2003      SEK  0.1099  0.1099
#7    05/01/2003      CHF  0.6858  0.6858
#8    03/01/2003      DKK  0.1346  0.1345