首页 > 解决方案 > 基于其他列中的标识符,将矩阵的行值乘以其他矩阵中的值

问题描述

有没有办法在没有循环的情况下将两个矩阵相乘?矩阵 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´´´


标签: rmatrix-multiplication

解决方案


我们可以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"
))

推荐阅读