我有一对df TRX
,有成对的Date和Curreny
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(日期,货币)。
getDayRate <- function(date, currency) {
currencies[which(as.character(currencies[,c("Date")]) == date),c(currency)]
}
getDayRate("2013-06-20","EUR")
现在我想将getDayRate(date,currency)
应用于TRX
的每一行,以便每行使用第一个和第二个元素作为参数,因此我得到ExchangeRate
。
apply(x,1,fun())
不起作用,因为它需要带数字的矩阵。从理论上讲,我必须将数据帧转换为索引,然后使用apply。
有更好的方法吗?
答案 0 :(得分:5)
使用mapply
,您可以执行以下操作:
mapply(getDayRate, TRX$Date, TRX$Currency)
答案 1 :(得分:1)
您想要的输出不是那么清晰。您的函数getDayRate
直接从硬编码到其中的currencies
表中检索到目前为止有意义的ExchangeRate选择日期和货币。
但是,对同一个表运行你的函数,它从我们检索的值中得到的结果与选择该列的结果相同......
> all.equal(mapply(getDayRate, currencies$Date, currencies$Currency), currencies$ExchangeRate, check.attributes=F)
[1] TRUE
可能(我认为)您实际上想要进行一些连接(使用您提供的第二个表?)将另一个表链接到currencies
数据框架date
和currency
。
编辑:
您的编辑现在可以澄清事情。你为什么不试试这个
library(reshape2)
melt(currencies)
答案 2 :(得分:0)
这样做可以让apply
起作用:
apply(your_df, 1, function(x) {getDayRate(x[1], x[2])})