Я хотел бы создать переменную с именем spill, которая определяется как сумма расстояний между векторами каждой строки, умноженная на стоимость акций. Например, рассмотрим
firm us euro asia africa stock year
A 1 4 3 5 46 2001
A 2 0 1 3 889 2002
B 2 3 1 1 343 2001
B 0 2 1 3 43 2002
C 1 3 4 2 345 2001
Я хотел бы создать вектор, который в основном берет расстояние между двумя фирмами в момент времени t и генерирует переменную разлива. Например, для фирмы А в 2001 году это будет 0,204588 (что является косинусным расстоянием между фирмой А и В в момент времени t, т. Е. В 2001 году (1,4,3,5) и (2,3,1, 1) (т. Е. Сходство инвестиций в нас, евро, азии, африке), а затем умножить на 343, а затем вычислить расстояние между А и С в 2001 году как .10528 * 345, следовательно, переменная разлива равна = 0,2045883 * 343 + 0,1052075 * 345 = 106,4704 за 2001 год для фирмы A.
Я хочу получить таблицу с разливом вот так
firm us euro asia africa stock year spill
A 1 4 3 5 46 2001 106.4704
A 2 0 1 3 889 2002
B 2 3 1 1 343 2001
B 0 2 1 3 43 2002
C 1 3 4 2 345 2001
Может кто-нибудь, пожалуйста, посоветовать?
Вот коды для stata [https://www.statalist.org/forums/forum/general-stata-discussion/general/1409182-calculating-distance-between-two-variables-and-generating-new-variable]. У меня около 3000 фирм и 30 лет. Работает хорошо, но очень медленно.
dt <- data.frame(id=c("A","A","B","B","C"),us=c(1,2,2,0,1),euro=c(4,0,3,2,3),asia=c(3,1,1,1,4),africa=c(5,3,1,3,2),stock=c(46,889,343,43,345),year=c(2001,2002,2001,2002,2001))