r - 基于其他列中的标识符,将矩阵的行值乘以其他矩阵中的值
问题描述
有没有办法在没有循环的情况下将两个矩阵相乘?矩阵 A 在一列中包含数值,在另一列中包含货币标识符。Matix B 包含货币标识符和目标货币的相应汇率。目标 --> 将矩阵 A 中的所有值转换为包含一种货币的所有值的新矩阵。
A <- data.frame(Values, Currencies)
Values Currencies
1 1000 EUR
2 1213 USD
3 5345 CHF
4 2323 EUR
B <- data.frame(CurrencyID, Spot)
CurrencyID Spot
1 EUR 1.0557
2 USD 0.9786
3 CHF 1.0000´´´
解决方案
我们可以join
使用data.table
on
两个数据集的“Currencies/CurrencyID”列,并通过将“Values”与“Spot”相乘来创建“Converted”列。它在“A”数据集中创建新列“Converted”
library(data.table)
setDT(A)[B, Converted := Values * Spot, on = .(Currencies = CurrencyID)]
A
# Values Currencies Converted
#1: 1000 EUR 1055.700
#2: 1213 USD 1187.042
#3: 5345 CHF 5345.000
#4: 2323 EUR 2452.391
数据
A <- structure(list(Values = c(1000L, 1213L, 5345L, 2323L), Currencies = c("EUR",
"USD", "CHF", "EUR")), class = "data.frame", row.names = c("1",
"2", "3", "4"))
B <- structure(list(CurrencyID = c("EUR", "USD", "CHF"), Spot = c(1.0557,
0.9786, 1)), class = "data.frame", row.names = c("1", "2", "3"
))
推荐阅读
- elasticsearch - fluent.conf 中的 time_format 配置
- reporting-services - SSRS - 具有 3 个值的条形图 - (一个条应突出显示 2 个值,其余一个在另一个条上)
- vue.js - Vue中导航项的可滚动下拉菜单
- angularjs - 如何在不同的环境中跟踪发布号
- javascript - passport-jwt 错误 401(未经授权)我该如何解决?
- python - Python Visual Studio Code 中的“很可能是由于循环导入”
- android - 命令在终端中运行,但不是从 .sh 文件中运行
- python - talib 抽象 API 与 talib
- m2doc - 尝试重做机上娱乐系统 M2DOC 示例时出错
- html - 无论焦点如何,HTML 选择始终具有蓝色背景