Умножение значений строки матрицы на значения в другой матрице на основе идентификатора в другом столбце - PullRequest
0 голосов
/ 16 апреля 2020

есть ли способ сделать следующее умножение двух матриц без al oop? Матрица A содержит числовые значения c в одном столбце и идентификаторы валют в другом. Matix B содержит идентификаторы валют и соответствующие курсы обмена к целевой валюте. Цель -> преобразовать все значения в матрице А в новую матрицу, содержащую все значения в одной валюте.

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´´´


1 Ответ

0 голосов
/ 16 апреля 2020

Мы можем сделать join с data.table on в столбце «Валюты / CurrencyID» обоих наборов данных и создать столбец «Конвертировано», умножив «Значения» на «Спот». Создается новый столбец «Преобразовано» в наборе данных «A»

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

data

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"
))
...