Разница между элементами двух массивов по общим значениям одного столбца в Юлии - PullRequest
0 голосов
/ 26 июня 2018

Вот вопрос, связанный с моим предыдущим вопросом, который я предпочитаю представить как новый вопрос. Предположим, на этот раз у нас есть только 2 следующих массива в Юлии:

5.0 3.5 6.0 3.6 7.0 3.0

5.0 4.5 6.0 4.7 8.0 3.0

Я хочу получить массив, который вычисляет разницу между элементами второго столбца (первый массив минус второй массив, в этом порядке), но только для общих значений первого столбца. В результате массив должен быть следующим:

5.0 -1 6.0 -1.1

Как мы можем написать в Julia код для получения этого последнего массива?

1 Ответ

0 голосов
/ 26 июня 2018

Предположим:

x = [5.0  3.5
     6.0  3.6
     7.0  3.0]
y = [5.0  4.5
     6.0  4.7
     8.0  3.0]

Опять же, есть много способов сделать это. Используя DataFrames вы можете написать:

using DataFrames
df = join(DataFrame(x, [:id, :x]), DataFrame(y, [:id, :y]), on=:id)
[df[:id] df[:x]-df[:y]]

Вы также можете конвертировать оригинальные массивы в словари и работать с ними:

dx = Dict(x[i,1] => x[i,2] for i in 1:size(x, 1))
dy = Dict(y[i,1] => y[i,2] for i in 1:size(y, 1))
ks = sort!(collect(intersect(keys(dx), keys(dy))))
[ks [dx[k]-dy[k] for k in ks]]

Разница между этими двумя методами заключается в том, как они будут обрабатывать дубликаты в x или y в первом столбце. Первый будет производить все комбинации, второй будет хранить только последнее значение для каждой клавиши.

...