4

我有一个TRX带有日期和货币对的df

Date            Currency      ExchangeRate
2012-08-13      EUR           ?
2012-08-13      CHF           ?
2012-08-13      CZK           ?

我有第二个 df CURRENCIES 以欧元为基础的货币兑换率。

Date            EUR    CHF       CZK
2012-08-13      1      1.24      25.73
2012-08-13      1      1.23      25.92
2012-08-13      1      1.22      24.00

现在我想翻译日费率。我为此 liske getDayRate(date,currency) 编写了一个函数。

getDayRate <- function(date, currency) {
currencies[which(as.character(currencies[,c("Date")]) == date),c(currency)]
}

getDayRate("2013-06-20","EUR")

现在我想应用getDayRate(date,currency)到每一行,TRX以便对于每一行它使用第一个和第二个元素作为参数,所以我得到了 teh ExchangeRate

apply(x,1,fun())不起作用,因为它需要一个带有数字的矩阵。理论上,我必须将数据帧转换为索引,然后使用 apply。

有没有更好的办法?

4

3 回答 3

6

mapply可以这样做:

mapply(getDayRate, TRX$Date, TRX$Currency)
于 2013-06-27T13:12:59.763 回答
1

你想要的输出不是很清楚。您的函数getDayRate直接从currencies硬编码到其中的表中检索 ExchangeRate 选择的日期和货币,这到目前为止是有意义的。

但是,针对同一个表运行您的函数,它会从中检索值,我们给出的结果与仅选择该列的结果相同......

> all.equal(mapply(getDayRate, currencies$Date, currencies$Currency), currencies$ExchangeRate, check.attributes=F)
[1] TRUE

可能(我认为)您实际上想要进行一些连接(使用您提供的第二个表?)通过and将另一个表链接到currenciesdata.frame 。datecurrency

编辑:

您的编辑现在澄清了事情。你为什么不试试这个

library(reshape2)

melt(currencies)
于 2013-06-27T13:48:55.777 回答
0

这应该可以apply开始工作:

apply(your_df, 1, function(x) {getDayRate(x[1], x[2])})
于 2013-06-27T13:17:34.703 回答