gpt4 book ai didi

r - 有效地将每行值转换为另一种货币

转载 作者:行者123 更新时间:2023-12-04 01:28:56 25 4
gpt4 key购买 nike

假设这两个data.frames:

rates <- data.frame(Date = c("2000-01-01","2000-03-02","2000-03-25","2000-04-13"), Euro = c(1.2,1.27,1.4,1.6), Aussie = c(0.85,0.82,0.93,0.89))
toConvert <- data.frame(Date = c("2000-01-01","2000-03-02","2000-03-25","2000-04-13"), currency = c("Euro","Aussie","Euro","Aussie"),
Value1 = c(5,6,7,8), Value2 = c(10,15,23,85),Value3 = c(50,60,89,93))

在给定 rates< 中的汇率的情况下,是否有一种有效的方法将 Value1Value2Value3 列转换为美元表?

本质上,代码必须根据 toConvert 表中的 Datecurrency 列找到汇率并划分 Value1Value2Value3 及其在 rates 表中的各自比率。

我已经尝试过使用一个有效的 for 循环,但需要很长时间。 (请记住,这些是示例表。实际的 toConvert 表包含 10 万行数据,而 rates 表包含 1990 年的每日数据)。

我尝试过的:

for (i in 1:nrow(toConvert)) {
rate <- as.numeric(rates[rates$Date == toConvert[i,]$Date, as.character(toConvert[1,]$currency)])
toConvert[i,]$Value1 <- toConvert[i,]$Value1 / rate
toConvert[i,]$Value2 <- toConvert[i,]$Value2 / rate
toConvert[i,]$Value3 <- toConvert[i,]$Value3 / rate
}

使用 10 万行需要花费大量时间。

预期输出:

    Date    currency   Value1    Value2    Value3
2000-01-01 Euro 4.166667 8.333333 41.66667
2000-03-02 Aussie 7.317073 18.292683 73.17073
2000-03-25 Euro 5.000000 16.428571 63.57143
2000-04-13 Aussie 8.988764 95.505618 104.49438

最佳答案

我建议你看看data.table数据量大的话打包

library(data.table)

setDT(rates)
setDT(toConvert)

lrates <- melt(rates,id.vars = "Date")
toConvert[lrates,c("Value1", "Value2", "Value3"):=.SD/i.value,on=.(Date,currency=variable),.SDcols = c("Value1", "Value2", "Value3")]

toConvert
#> Date currency Value1 Value2 Value3
#> 1: 2000-01-01 Euro 4.166667 8.333333 41.66667
#> 2: 2000-03-02 Aussie 7.317073 18.292683 73.17073
#> 3: 2000-03-25 Euro 5.000000 16.428571 63.57143
#> 4: 2000-04-13 Aussie 8.988764 95.505618 104.49438

reprex package 创建于 2020-04-22 (v0.3.0)

关于r - 有效地将每行值转换为另一种货币,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61366176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com